1
我想知道是否有人尝试使用[gevent] [1]和[socksipy] [2]进行并发下载。gevent和socksipy
我想知道是否有人尝试使用[gevent] [1]和[socksipy] [2]进行并发下载。gevent和socksipy
我已经使用gevent从yfrog,instagram,twitpic等下载〜12k图片。 图片的累积大小约为1.5Gb,花费大约20分钟的时间将它们全部下载到我家的wifi上。
为此,我实现了一个image_download
函数,其唯一目的是从给定URL下载图片,然后使用gevent.Pool
异步映射image_download
函数上的URL列表。
from gevent import monkey
monkey.patch_socket() # See http://www.gevent.org/gevent.monkey.html
import gevent
NB_WORKERS = 50
def image_download(url):
# retrieve image
def parallel_image_download(urls): # urls is of type list
""" Activate NB_WORKERS Greenlets to asynchronously download the images. """
pool = gevent.Pool(NB_WORKERS)
return pool.map(image_download, urls)
注:经过几次尝试,我找到了50名并行工人。通过50,总运行时间没有增加。
这是一个有趣的例子。感谢分享。我可以问你为什么使用pool.map而不是gevent.spawn吗?他们之间有区别吗? – JohnJ
看看http://sdiehl.github.com/gevent-tutorial/。我觉得''Pool.map()''为你处理搜索结果,我需要得到所有结果的列表。也许你可以用''spawn()''来做同样的事情。我只知道它使用'map()'很好。 –
是的,我见过那个教程。那么收集结果我使用gevent.joinall做结果收集。感谢您的见解。 – JohnJ