2024-09-28 22:21:32 发布
网友
假设我有一个函数:
from time import sleep def doSomethingThatTakesALongTime(number): print number sleep(10)
然后我在for循环中调用它
如何设置此项以便只需10秒即可打印出:
$ 0123456789
而不是花100秒。如果有帮助的话,我将使用您提供的信息来执行异步web抓取。i、 我有一个我想访问的网站列表,但我想同时访问它们,而不是等待每个网站完成。在
尝试使用Eventlet-文档中的first example演示了如何实现同步URL获取:
urls = ["http://www.google.com/intl/en_ALL/images/logo.gif", "https://wiki.secondlife.com/w/images/secondlife.jpg", "http://us.i1.yimg.com/us.yimg.com/i/ww/beta/y3.gif"] import eventlet from eventlet.green import urllib2 def fetch(url): return urllib2.urlopen(url).read() pool = eventlet.GreenPool() for body in pool.imap(fetch, urls): print "got body", len(body)
我也可以建议向Celery寻求更灵活的解决方案。在
asyncoro支持异步、并发编程。它包括异步(非阻塞)套接字实现。如果您的实现不需要urllib/httplib等(没有异步完成),那么它可能适合您的目的(并且易于使用,因为它非常类似于使用线程编程)。asyncoro的上述问题:
import asyncoro def do_something(number, coro=None): print number yield coro.sleep(10) for number in range(10): asyncoro.Coro(do_something, number)
看一看scrapy框架。它是专门为网页抓取而设计的,非常好。它是异步的,构建在twisted框架上。在
{a1}
尝试使用Eventlet-文档中的first example演示了如何实现同步URL获取:
我也可以建议向Celery寻求更灵活的解决方案。在
asyncoro支持异步、并发编程。它包括异步(非阻塞)套接字实现。如果您的实现不需要urllib/httplib等(没有异步完成),那么它可能适合您的目的(并且易于使用,因为它非常类似于使用线程编程)。asyncoro的上述问题:
看一看scrapy框架。它是专门为网页抓取而设计的,非常好。它是异步的,构建在twisted框架上。在
{a1}
相关问题 更多 >
编程相关推荐