1

我想知道是否有人尝试使用 [gevent][1] 和 [socksipy][2] 进行并发下载。

4

1 回答 1

2

我使用 gevent 从 yfrog、instagram、twitpic 等下载了大约 12k 张图片。图片的累积大小约为 1.5Gb,在我的家庭 wifi 上下载它们需要大约 20 分钟。

为此,我实现了一个image_download函数,其唯一目的是从给定 URL 下载图片,然后image_download使用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,总运行时间没有增加。

于 2012-11-22T19:37:45.133 回答