【发布时间】:2012-11-18 21:37:04
【问题描述】:
我有一个链接流,我想不时检查它们是否有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) 似乎根本没有运行。我做错了什么?
【问题讨论】:
-
线程是你的朋友
-
但是每隔一秒就开始一个新线程不是有点多吗?
-
不,不是,但你不需要,你可以触发 3 个线程并通过一个公共队列向它们提交 URL。
标签: python asynchronous tornado pycurl