2015-12-03 2 views
2

Как вы диагностируете и исправляете неуправляемый API-интерфейс Google?Время загрузки API-интерфейсов Google Диска

Я пытаюсь загрузить несколько небольших файлов, и иногда он работает отлично и занимает всего несколько секунд. В других случаях он, кажется, вешает бесконечно. Я оставил его работать в течение часа, пытаясь загрузить крошечный 1 МБ-файл. Я не уверен, как это исправить, поскольку это не исключение, разрешения, похоже, все в порядке, и мое подключение к Интернету кажется более чем достаточно быстрым. Это просто происходит навсегда, и кажется, что что-то за кулисами уже пришло в себя.

Это мой код:

import httplib2 
import os 

from apiclient import discovery 
from apiclient.http import MediaFileUpload 
import oauth2client 
from oauth2client import client 
from oauth2client import tools 

SCOPES = 'https://www.googleapis.com/auth/drive' 
CLIENT_SECRET_FILE = 'my-app-secret-file.json' 
APPLICATION_NAME = 'my-app' 

def get_installed_app_credentials(): 
    """Gets valid user credentials from storage. 

    If nothing has been stored, or if the stored credentials are invalid, 
    the OAuth2 flow is completed to obtain the new credentials. 

    Returns: 
     Credentials, the obtained credential. 
    """ 
    home_dir = os.path.expanduser('~') 
    credential_dir = os.path.join(home_dir, '.credentials') 
    if not os.path.exists(credential_dir): 
     os.makedirs(credential_dir) 
    credential_path = os.path.join(credential_dir, 
            'drive-quickstart.json') 

    store = oauth2client.file.Storage(credential_path) 
    credentials = store.get() 
    if not credentials or credentials.invalid: 
     flow = client.flow_from_clientsecrets(CLIENT_SECRET_FILE, SCOPES) 
     flow.user_agent = APPLICATION_NAME 
     credentials = tools.run(flow, store) 
     print 'Storing credentials to ' + credential_path 
    return credentials 

def upload_file(): 
    credentials = get_installed_app_credentials() 
    http = credentials.authorize(httplib2.Http()) 
    service = discovery.build('drive', 'v2', http=http) 

    drive_folder_id = '0wlekrjelkjsfdBHYjdhb21CNm5' 
    filename = 'myfile.txt' 
    file = service.files().insert(
     body={ 
      'title': filename, 
      'parents': [{'id': drive_folder_id}], 
     }, 
     media_body=MediaFileUpload(
      filename, 
      resumable=True), 
    ).execute() 

ответ

2

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

+0

Это лучший подход, потому что если запрос занимает слишком много времени, вы можете его прервать, а затем запросить, чтобы узнать, сколько данных (если они есть) было получено сервером загрузки диска. – kiwidrew

Смежные вопросы