Загрузить несколько частей одного файла одновременно с Python? - PullRequest
7 голосов
/ 14 марта 2011

Я знаю, как использовать urllib для загрузки файла. Однако гораздо быстрее, если сервер позволяет, загружать несколько частей одного и того же файла одновременно, а затем объединять их.

Как ты это делаешь в Python? Если вы не можете сделать это легко со стандартной библиотекой, какая библиотека позволит вам это сделать?

Ответы [ 2 ]

17 голосов
/ 14 марта 2011

Хотя я согласен с предложением Грегори использовать существующую библиотеку, стоит отметить, что вы можете сделать это, используя HTTP-заголовок Range. Если сервер принимает запросы в диапазоне байтов, вы можете запустить несколько потоков для параллельной загрузки нескольких частей файла. Этот фрагмент, например, будет загружать только байты 0..65535 указанного файла:

import urllib2
url = 'http://example.com/test.zip'
req = urllib2.Request(url, headers={'Range':'bytes=0-65535'})
data = urllib2.urlopen(req).read()

Вы можете определить размер удаленного ресурса и посмотреть, поддерживает ли сервер удаленные запросы, отправив запрос HEAD:

import urllib2

class HeadRequest(urllib2.Request):
    def get_method(self):
        return "HEAD"

url = 'http://sstatic.net/stackoverflow/img/sprites.png'
req = HeadRequest(url)
response = urllib2.urlopen(req)
response.close()
print respose.headers

Вышеуказанные отпечатки:

Cache-Control: max-age=604800
Content-Length: 16542
Content-Type: image/png
Last-Modified: Thu, 10 Mar 2011 06:13:43 GMT
Accept-Ranges: bytes
ETag: "c434b24eeadecb1:0"
Date: Mon, 14 Mar 2011 16:08:02 GMT
Connection: close

Отсюда видно, что размер файла составляет 16542 байта ('Content-Length'), а сервер поддерживает диапазоны байтов ('Accept-Ranges: bytes').

6 голосов
/ 14 марта 2011

PycURL может это сделать.PycURL - это интерфейс Python для libcurl.Его можно использовать для извлечения объектов, идентифицированных по URL, из программы Python, аналогично модулю Pyll urllib.PycURL является зрелым, очень быстрым и поддерживает множество функций.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...