Есть ли способ улучшить скорость загрузки URL-адреса на Python?Загрузка python чрезвычайно медленная
У меня есть программа, которую я написал в VB6, которая курит Python, не пытаясь. Я переработал эту вещь, и сейчас я ее пробовал, и в Python (linux) ситуация выглядит намного медленнее, вдвое длиннее. Даже начальная версия программы показалась, что она занимала больше времени, чем то, что я использовал для нее, принимая Windows.
Я пробовал использовать как urllib
(2.7), urllib.request
(3.3), так и requests
. В настоящее время я пытаюсь использовать urllib3
, и это не так быстро. То, что обычно занимает 45 минут в Windows, похоже, что для выполнения одной и той же задачи на одном компьютере на одном и том же интернет-соединении потребуется около двух часов. Задача - просто искать в Интернете и загружать файлы, когда поиск находит то, что он ищет ... просто диапазон потенциальных имен файлов.
Я также спрошу, так как это произошло более одного раза до сегодняшнего дня, как мне обнаружить код ошибки 110 (время ожидания подключения). То, что я использую ниже, не работает, и оно все еще убило программу.
import urllib3
http = urllib3.PoolManager()
def dl_10(self):
self.NxtNum10 = int(self.HiStr10)
while self.NxtNum10 < int(self.HiStr10)+9999:
url = 'http://www.example.com/videos/encoded/'+str(self.NxtNum10)+'.mp4'
r = http.request('GET', url)
if r.status==404:
self.NxtNum10 +=1
continue
elif r.status==110:
continue
else:
urllib.request.urlretrieve(url,str(self.NxtNum10)+'_1.mp4')
statinfo = os.stat(str(self.NxtNum10)+'_1.mp4')
if statinfo.st_size<10000:
os.remove(str(self.NxtNum10)+'_1.mp4')
else:
self.End10 = self.NxtNum10
self.NxtNum10 +=1
self.counter +=1
self.NxtNum10 = 'FINISHED'
Это выполняется через потоки, я бы не подумал, что это должно иметь значение. Как я уже сказал, начальная запись с использованием urllib (2.7) тоже была медленной, и она не использовала потоки. Я просто запускал программу 10 раз, как и всегда в Windows.
Есть ли более быстрый способ захвата материала из Интернета с помощью Python?
Вы говорите об общем времени, или индивидуальное время? Мне кажется, что вы загружаетесь последовательно, а не параллельно. – Keith
У меня есть 10 отдельных треков через 10 000 файлов последовательно. Каждая программа в Windows (VB6) обычно занимает 45-50 минут, чтобы завершить полный цикл (со всеми 10 запущенными одновременно). В linux/Python за один час я смог получить только более 3000 файлов на поток. Поэтому почему меня шокирует отсутствие скорости. Единственное, что изменилось, - это Windows для Linux и VB6 для Python. Все остальное - то же самое. Вчера вечером я собирался попробовать Python в Windows. Мне надоело пытаться установить модули и сдаться. Linux лучше подходит для использования Python. – confused
Да, я вижу из вашего стиля, что вы более знакомы с VB. ;) Я не могу сказать, что здесь происходит, но вы можете попробовать pycurl (оболочка python для libcurl). – Keith