在没有等待答案的情况下关闭功能(Python)

knu*_*ole 7 python asynchronous tornado pycurl

我有一串链接进来,我想不时检查它们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)
Run Code Online (Sandbox Code Playgroud)

我想如果我可以点击并忘记第一次通话,那么我甚至可以使用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
Run Code Online (Sandbox Code Playgroud)

Greenlet似乎已注册,但该功能self.ff.do_url(url)似乎根本没有运行.我究竟做错了什么?

Rad*_*dix 7

使用多处理模块即发即弃:

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"
Run Code Online (Sandbox Code Playgroud)


e-s*_*tis 0

您想要使用线程模块或多处理模块并将结果保存在数据库、文件或队列中。

您还可以使用gevent