1
누구나 동시 다운로드에 [gevent] [1] 및 [socksipy] [2]를 사용했는지 궁금합니다.gevent and socksipy
누구나 동시 다운로드에 [gevent] [1] 및 [socksipy] [2]를 사용했는지 궁금합니다.gevent and socksipy
yfrog, 인스 타 그램, twitpic 등에서 12k ~ 12k의 사진을 다운로드 할 때 gevent를 사용했습니다. 사진의 누적 크기는 1.5Gb 였고 집에서 Wi-Fi로 다운로드하는 데는 20 분 정도 걸렸습니다. .
이렇게하려면 주어진 URL에서 그림을 다운로드 한 다음 을 사용하여 image_download
함수에서 비동기 적으로 URL 목록을 매핑 한 image_download
함수를 구현했습니다.
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을 성공하면 총 런타임이 늘어나지 않았습니다.
흥미로운 예입니다. 공유해 주셔서 감사합니다. gevent.spawn 대신 pool.map을 사용하는 이유는 무엇입니까? 그들간에 차이점이 있습니까? – JohnJ
http://sdiehl.github.com/gevent-tutorial/을보십시오. 내 느낌은''Pool.map()''이 결과 수집을 처리하고 모든 결과 목록을 가져와야한다는 것입니다. ''spawn()''을 사용하여 동일하게 처리 할 수 있습니다. 나는 그것이''map()''과 잘 작동한다는 것을 알고있다. –
예 튜토리얼을 보았습니다. 결과를 수집하기 위해 gevent.joinall을 사용하여 결과 컬렉션을 수행했습니다. 통찰력을 가져 주셔서 감사합니다. – JohnJ