2012-11-30 11 views
5

İçeride bir bağlantı akışı var ve bunları şimdi ve sonra rss için kontrol etmek istiyorum. Ama benim get_rss() işlevimi kapattığımda, engeller ve akış durur. Bu gereksizdir ve sadece get_rss() işlevi hakkında ateşle ve unut istiyorum (başka bir yerde sonuçlarını saklar.) Böylece gibiYanıtı beklemeden fonksiyonu devre dışı bırak (Python)

Benim kodudur: Ben düşünüyorum

self.ff.get_rss(url) # not async 
print 'im back!' 

(...) 

def get_rss(url): 
    page = urllib2.urlopen(url)  # not async 
    soup = BeautifulSoup(page) 

Eğer ilk çağrıyı ateşleyebilir ve unutabilirsem, o zaman bile, async olmadığından endişelenen urllib2'yi kullanabilirim. Herhangi bir yardım çok takdir edilir!

Düzenleme: gevent deniyorlar, ama bu bir şey gibi olur:

print 'go' 
g = Greenlet.spawn(self.ff.do_url, url) 
print g 
print 'back' 

# output: 
go 
<Greenlet at 0x7f760c0750f0: <bound method FeedFinder.do_url of <rss.FeedFinder object at 0x2415450>>(u'http://nyti.ms/SuVBCl')> 
back 

Greenlet kayıtlı olması görünebilir ancak fonksiyon self.ff.do_url(url) hiç çalıştırılacak görünmüyor. Neyi yanlış yapıyorum?

+0

parçacığı arkadaşınız – zenpoy

+0

ama biraz fazla her diyelim ikinci yeni bir iş parçacığı başlatmak için değil mi? – knutole

+1

Hayır öyle değil, buna gerek yok, 3 iş parçacığı işleyebilir ve ortak bir sırayla onlara URL gönderebilirsiniz. –

cevap

2

Ya database, bir dosya veya bir queue sonucu threading modül veya multiprocessing modülü kullanmak ve kurtarmak istiyorum.

gevent'u da kullanabilirsiniz.

+0

Nasıl gevent ile yazabilirim? – knutole

+0

Cevabınızı gerçekten takdir edin. Ama yukardaki gevent ile sıkışıp kaldım. Herhangi bir fikir? Teşekkürler. – knutole

3

Yangın ve çoklu işlem modülü kullanarak unutmak:

def fire_and_forget(arg_one): 
    # do stuff 
    ... 

def main_function(): 
    p = Process(target=fire_and_forget, args=(arg_one,)) 
    # you have to set daemon true to not have to wait for the process to join 
    p.daemon = True 
    p.start() 
    return "doing stuff in the background"