我是新来的python。目前,我试图实现一个程序来从远程服务器(http/https)下载大量文件。没有。的文件很大(> 1000)。为了处理这个问题,我需要以某种方式实现代码,以便能够以高效和最优的方式利用操作系统资源。为了处理这个问题,我采取的方式是多处理。在Python中的多线程优化下载文件
这里,是我实现:
import urllib,urlparse
import urllib2
import os
import multiprocessing
from multiprocessing.dummy import Pool as ThreadPool
from itertools import repeat
def download_file((url, d_dir)) :
#logger.debug('Download URL -> ' + url)
try :
with open(d_dir + os.sep + urlparse.urlparse(url).path, 'wb') as tfile :
tfile.write(urllib2.urlopen(url).read())
except :
logger.error('There was a some problem while downloading file, ' + url)
def create_pool(d_links, d_dir) :
pool = multiprocessing.Pool(processes=10)
pool.map(download_file, zip(d_links, repeat(d_dir)))
def extract_urls() :
# some logic to extract urls from files
links = {‘url1’, ‘url2’, ‘url3’, ‘url4’, ‘url5’, …}
#created process pool
create_pool(links, l_dir)
如果我运行这段代码,它给了我正常输出。但我想我没有正确实现多处理。你可以给一些输入来优化这段代码吗?
在此先感谢。
问候, 阿希什
“回溯(最近通话最后一个): 文件 “FileScanner.py”,线路192,在create_pool create_threadpool(d_links,d_dir) 文件 “FileScanner.py” ,第195行,在create_threadpool 与multiprocessing.Pool(4)作为池: AttributeError:__exit__' 以上错误我得到如果我按照您的建议实施 –
@AshishMisra抱歉,但我没有得到错误。我编辑了我的答案两次,也许再试一次 –
@MatthiasGlich:谢谢。其实你是对的,但我的服务器上的python版本是2.7,你的建议是从python 3。 –