Правильное использование возобновляемой загрузки с клиентской библиотекой python

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

На этой странице: https://developers.google.com/api-client-library/python/guide/media_upload
в нем указано:

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

Описывает также способ сделать это с помощью next_chunk(), проверки на наличие ошибок и использования экспотенциальных повторных попыток.

Все другие ссылки на загрузку, либо вставку, либо обновление файла, используют «resumable=True», но не реализуют функцию «next_chunk». Как на этой странице: https://developers.google.com/drive/v2/reference/files/insert#examples

Означает ли это, что "resumable" обрабатывается библиотекой?
Если нет, то в случае ошибок они такие же, как и в предыдущем примере (с next_chunk)?
Если мое приложение должно перехватывать ошибки тогда единственный способ - начать загрузку с самого начала, поскольку нет возврата байтов успеха или чего-то еще. Это правильный путь?

Также на этой странице: https://developers.google.com/drive/manage-uploadsговорится:

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

Какое из этих двух утверждений верно?

Заранее благодарим за любую информацию.
Андреас


person sv1jsb    schedule 22.12.2012    source источник


Ответы (1)


Андреас,

Я считаю, что service.files.insert().execute() со свойством resumable=true делает что-то похожее на руководство next_chunk в приведенном вами примере... Я не уверен, как именно он это обрабатывает, потому что я не мог не могу найти способ прочитать исходный код (я только начинаю с python), но если я прерву загрузку большого файла с помощью метода .insert().execute() с resumable=true, одна из строк вывод таков:

File "/usr/lib/python2.5/site-packages/apiclient/http.py", line 656, in execute
  _, body = self.next_chunk(http=http)

Однако я не смог найти способ получить индикатор прогресса с помощью этого метода, поэтому вместо этого я предпочел использовать ручной request.next_chunk().

Что касается затрат на производительность возобновляемой загрузки, то отправляется дополнительная информация, но я не думаю, что это слишком сильно замедлит процесс... вы можете использовать большие размеры фрагментов (несколько МиБ), чтобы дополнительные байты запросов были незначительными. Документация SDK в некоторых случаях приводит доводы в пользу возобновляемой загрузки:

«Для более надежной загрузки файлов данных вы можете использовать протокол возобновляемой загрузки. Этот протокол позволяет возобновить операцию загрузки после того, как сбой связи прервал поток данных. Это особенно полезно, если вы передаете большие файлы и вероятность прерывание сети или какой-либо другой сбой передачи, например, при загрузке из мобильного клиентского приложения. Это также может снизить использование полосы пропускания в случае сбоев сети, поскольку вам не нужно перезапускать загрузку больших файлов с самого начала. "

person GabrielF    schedule 12.01.2013