【发布时间】:2013-03-18 12:10:46
【问题描述】:
我有一百万个 URL 需要验证。 其中一些无法从我的国家/地区访问,有些无效,我想验证所有网址。 我使用python来做到这一点,并使用gevent来加速速度,但我是gevent的新手,有些似乎不起作用。 我的代码如下:
import gevent
import gevent.monkey
import urllib2
from gevent.pool import Pool
from gevent import Timeout
gevent.monkey.patch_all()
p = Pool(10)
seconds = 10
#timeout = Timeout(seconds)
#timeout.start()
#timer = Timeout(3).start()
def down(url):
urllib2.urlopen(url)
def wait():
while True:
gevent.sleep(0)
print 'hi'
with Timeout(5,False):
p.spawn(down,'http://www.twitter.com')
print '---------------------------------'
wait()
我的国家无法访问 Twitter,输出为:
hi
---------------------------------
hi
---------------------------------
hi
5 秒后它没有告诉超时,我的代码有什么问题?
我想知道如何在运行时向 gevent 添加新任务。
我想验证分发中的所有 url,所以我从数据库中读取 url 并将 url 发送到消息队列,许多接收者从消息中接收消息,然后验证 url。
我的消息是rabbitmq。
我只知道如果我有 10 个 url,我可以使用 gevent,例如:
for x in xrange(10)
tasks.append(gevent.spawn(validate,url))
gevent.joinall(tasks)
但在我的情况下,我只是阅读了一条消息,然后生成了一个 greenlet,如果一个 url 无法访问,它将阻止该消息,直到 greenlet 完成。
那么我该如何做一些异步的方式来验证我的网址呢? 比如我总是读回 url 并在没有阻塞的情况下生成 greenlet。
谢谢
【问题讨论】: