我想知道是否有人尝试过使用 [gevent][1] 和 [socksipy][2] 进行并发下载。
最佳答案
我使用 gevent 从 yfrog、instagram、twitpic 等下载了大约 12k 张图片。 图片的累积大小约为 1.5Gb,在我家的 wifi 上下载全部图片大约需要 20 分钟。
为此,我实现了一个 image_download
函数,其唯一目的是从给定的 URL 下载图片,然后在 image_download
函数上异步映射 URL 列表,使用gevent.Pool
。
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,总运行时间并没有增加。
关于python - gevent 和 soksipy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13272397/