在python的单独线程中上载到Google驱动器

2024-04-20 12:58:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我遇到了一个问题,在一个单独的线程中上传到python3.6中的googledrive似乎仍然阻塞了我的主线程。你知道吗

我正在运行一个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驱动器开始时,任何新的请求都会挂起,直到上传完成。你知道吗

知道原因吗?我能做些什么来保持服务器响应?你知道吗


Tags: to服务器idreturndefgoogleargsdrive