Я получаю максимум около 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 Мбит / с?