8

リンクのストリームが入ってくるので、時々チェックしたいと思いrssます。しかし、関数を起動すると、get_rss()関数がブロックされ、ストリームが停止します。これは不要であり、関数を起動して忘れたいと思いget_rss()ます (結果は別の場所に保存されます)。

私のコードは次のようになります:

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

(...)

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

最初の呼び出しを起動して忘れることができれば、非同期ではないことを心配せずに urllib2 を使用することさえできると考えています。どんな助けでも大歓迎です!

編集:geventを試してみましたが、このように何も起こりません:

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 は登録されているようですが、機能self.ff.do_url(url)はまったく実行されていないようです。私は何を間違っていますか?

4

3 に答える 3

8

マルチプロセッシング モジュールを使用して起動して忘れる:

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"
于 2016-06-28T19:29:38.513 に答える
0

threadingモジュールまたはmultiprocessingモジュールを使用して、結果をデータベース、ファイル、またはキューに保存します。

geventも使用できます。

于 2012-11-30T16:27:26.500 に答える