我有一百万个要验证的网址。其中一些是我的国家无法访问的,有些是无效的,我想验证所有的 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()
推特无法从我的国家/地区访问,输出为:
hi
---------------------------------
hi
---------------------------------
hi
5秒后它没有告诉超时,我的代码有什么问题?
我想知道如何在运行时向 gevent 添加新任务。
我想在分发中验证我的所有 url,所以我从我的数据库中读取 url 并将 url 发送到消息队列,很多接收者从消息中接收消息,然后验证 url。
我的消息是rabbitmq。
我只知道我是否有 10 个网址,我可以使用 gevent,例如:
for x in xrange(10)
tasks.append(gevent.spawn(validate,url))
gevent.joinall(tasks)
但在我的情况下,我只阅读了一条消息,然后生成了一个 greenlet,如果一个 url 无法访问,它将阻止该消息,直到 greenlet 完成。
那么我怎样才能做一些异步的方式来验证我的网址呢?比如我总是读回 url 并在没有阻塞的情况下生成 greenlet。
谢谢