2016-08-15 3 views
0

Я пытаюсь загрузить около 500k небольших файлов csv (5kb-1mb) из списка URL-адресов, но для этого требуется слишком много времени. С приведенным ниже кодом мне повезло, если я получаю 10k файлов в день.Загрузка тысяч файлов с использованием python

Я попытался использовать пакет многопроцессорности и пул для загрузки нескольких файлов одновременно. Это кажется эффективным для первых нескольких тысяч загрузок, но в конечном итоге общая скорость снижается. Я не эксперт, но я предполагаю, что скорость снижения указывает на то, что сервер, который я пытаюсь загрузить, не может идти в ногу с этим количеством запросов. Это имеет смысл?

Если честно, я здесь совершенно потерялся и задавался вопросом, есть ли какой-нибудь совет относительно того, как ускорить это.

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

вы можете написать все URL-адреса в текстовом файле, а затем использовать менеджер загрузки, например 'aria2', чтобы скачать их :-) – aliva

+0

спасибо за предложение, я думаю, что это может сработать. Я читал документацию aria2 и не могу найти, как назвать файлы. Знаете ли вы, можно ли назвать загруженные файлы URL-адресом (или подстрокой)? – tan

+0

'aria2c -i file.txt' – aliva

ответ

-1

Вы перекодируете колесо!

Как об этом:

parallel -a urls.file axel 

Конечно, вам придется установить parallel и axel для распределения.

axel многопоточный аналог wget

parrallel позволяет запускать задачи с использованием многопоточности.

+0

Благодарю вас за комментарий. он отлично работает, но я все еще стараюсь правильно назвать файлы. это имеет первостепенное значение, поскольку csv не несет никакой информации об исходном URL-адресе. – tan

 Смежные вопросы

  • Нет связанных вопросов^_^