python - gevent 和 soksipy

标签 python asyncsocket gevent greenlets

我想知道是否有人尝试过使用 [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/

相关文章:

python - StreamingHttpResponse : return database connection to pool/close it

python - 如何获取颜色图的一部分

python - 如何自动修复 pylint 报告的 lint 问题?

iphone - Cocoa、Stomp、ActiveMQ、iPhone、SSL 和 AsyncSocket 需要帮助

ios - iOS套接字编程中的套接字响应问题

python - alpine linux上gdb调试python(3)进程,无法使用py-list

asynchronous - 如何在 Flask/gunicorn/gevent 中启动一个异步函数?

python - 使用回溯在 8x8 棋盘上实现骑士之旅

python - 如何在 Python 中循环输入?

c# - 使用异步套接字为 TCP 代理服务器实现线程