Я сталкиваюсь с проблемой, когда загрузка в 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 Диск, любые новые запросы зависают до завершения загрузки.
Есть идеи, почему это так и что я могу сделать, чтобы сервер отвечал?