Google Drive Python API Возобновляемый носитель (частичная загрузка) медленно - PullRequest
0 голосов
/ 08 февраля 2019

Я получаю максимум около 20 Мбит / с при любой загрузке файла, который является возобновляемым = True и chunked (независимо от размера chunksize), однако я получаю свою полную скорость интернета загрузки 180 Мбит / с для одного и того же файла, когда не использую этот метод.Проблема заключается в том, что если файл слишком велик для размещения в памяти (или даже для многопоточной загрузки), на компьютере не хватит памяти, и мне придется использовать частичную загрузку, которая слишком медленная.

Общий кодмежду обоими примерами:

import os
from google.oauth2 import service_account
from googleapiclient.discovery import build, MediaFileUpload

def create_drive_service(user_email,SERVICE_ACCOUNT_JSON_FILE,SCOPES=None):
    if SCOPES is None: SCOPES = ['https://www.googleapis.com/auth/drive']
    credentials = service_account.Credentials.from_service_account_file(SERVICE_ACCOUNT_JSON_FILE)
    credentials = credentials.with_scopes(SCOPES)
    credentials = credentials.with_subject(user_email)
    return build('drive', 'v3', credentials=credentials)
#
# Fill in the following
#
jsonpath = 'c:\\path\\to\\service_account.json'
service = create_drive_service('user@domain',jsonpath)
filename = 'filename.ext'
filepath = 'c:\\path\\to\\folder\\' + filename
parent_id = ''

Код медленный:

file_metadata = {"name":filename,"parents":[parent_id]}
media = MediaFileUpload(filepath,chunksize=-1,resumable=True)
request = service.files().create(body=file_metadata,media_body=media,fields='id')
while response is None:
    status, response = request.next_chunk()
file = request.execute()

Код, работающий на полной скорости, но не в случае, если файл слишком большой для размещения в памяти:

file_metadata = {"name":filename,"parents":[parent_id]}
media = MediaFileUpload(filepath,resumable=False)
request = service.files().create(body=file_metadata,media_body=media,fields='id').execute()

Как загрузить большой файл, не беспокоясь о нехватке памяти и не ограничиваясь 20 Мбит / с?

...