Загрузка в Google Drive в отдельном потоке на python - PullRequest
0 голосов
/ 01 мая 2019

Я сталкиваюсь с проблемой, когда загрузка в Google Drive в Python 3.6 в отдельном потоке все еще блокирует мой основной поток.

Я использую сервер flask (в контейнере Docker), которыйПо запросу запускается отдельный поток, который скачивает файл и загружает его на Google Drive.Лишенный всего остального, это в основном это:

@app.route('/work')
def work():
    thread = Thread(target=handle, args=request.args.to_dict())
    thread.start()
    return 'Working'

def handle(args):
    filename = download(args)
    upload_to_drive(filename)

def upload_to_drive(filename):
    media = MediaFileUpload(filename, mimetype=appropriate_mimetype(filename))
    drive = googleapiclient.discovery.build('drive', 'v3', credentials=CREDS)
    uploaded_file_id = drive.files().create(
        body={'name': filename},
        media_body=media,
        fields='id'
    ).execute()
    return uploaded_file_id

После того, как сервер запускает поток и отвечает на запрос, любой другой запрос к серверу обслуживается нормально, но только во время его загрузки (используя requests.get(..., stream=True).iter_content()Тем не менее, когда начинается загрузка на Google Диск, любые новые запросы зависают до завершения загрузки.

Есть идеи, почему это так и что я могу сделать, чтобы сервер отвечал?

...