Ho un flusso di link in arrivo, e voglio controllarli per rss
di tanto in tanto. Ma quando sparo la mia funzione get_rss()
, blocca e il flusso si arresta. Questo è inutile, e mi piacerebbe solo fire-and-forget sulla funzione get_rss()
(memorizza i propri risultati altrove.)Funzione di spegnimento senza attendere risposta (Python)
Il mio codice è come così:
self.ff.get_rss(url) # not async
print 'im back!'
(...)
def get_rss(url):
page = urllib2.urlopen(url) # not async
soup = BeautifulSoup(page)
sto pensando che se posso licenziare e dimenticare la prima chiamata, allora posso anche usare urllib2 senza preoccuparmi che non sia asincrona. Ogni aiuto è molto apprezzato!
Edit: Provare gevent, ma come questo non succede nulla:
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
La Greenlet sembrano essere registrata, ma la funzione self.ff.do_url(url)
non sembra essere funzionare affatto. Che cosa sto facendo di sbagliato?
threading è tuo amico – zenpoy
, ma non è che un po 'troppo per iniziare un nuovo thread ogni, diciamo, secondo? – knutole
No non lo è, ma non è necessario, è possibile attivare 3 thread e inviare URL a loro anche se una coda comune. –