我试图从网址列表中下载大约500万个小型csv文件(5kb-1mb),但要完成此操作需要花费太长时间。使用下面的代码,如果我每天获得10k文件,我很幸运。
我尝试过使用多处理程序包和池同时下载多个文件。这似乎对前几千次下载有效,但最终整体速度下降。我不是专家,但我认为速度下降表明我尝试下载的服务器无法满足这一数量的请求。这有道理吗?
说实话,我在这里迷失了,并且想知道是否有任何关于如何加快这一点的建议。
import urllib2
import pandas as pd
import csv
from multiprocessing import Pool
#import url file
df = pd.read_csv("url_list.csv")
#select only part of the total list to download
list=pd.Series(df[0:10000])
#define a job and set file name as the id string under urls
def job(url):
file_name = str("test/"+url[46:61])+".csv"
u = urllib2.urlopen(url)
f = open(file_name, 'wb')
f.write(u.read())
f.close()
#run job
pool = Pool()
url = [ "http://" + str(file_path) for file_path in list]
pool.map(job, url)
答案 0 :(得分:-1)
你正在重新编码轮子!
怎么样:
parallel -a urls.file axel
当然,您必须为您的发布安装parallel
和axel
。
axel
是wget
parrallel
允许您使用多线程运行任务。