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