我有一个web端点供用户上传文件。 当端点接收到请求时,我希望运行后台作业来处理该文件。在
由于完成作业需要时间,因此我希望将作业id返回给用户,以便在作业在后台运行时跟踪请求的状态。在
我想知道asyncio在这种情况下是否有帮助。在
import asyncio
@asyncio.coroutine
def process_file(job_id, file_obj):
<process the file and dump results in db>
@app.route('/file-upload', methods=['POST'])
def upload_file():
job_id = uuid()
process_file(job_id, requests.files['file']) . # I want this call to be asyc without any await
return jsonify('message' : 'Request received. Track the status using: " + `job_id`)
使用上述代码,永远不会调用process_file方法。不明白为什么。在
我不确定这是不是正确的方法,但请帮助,如果我错过了什么。在
由于@py_dudementioned,} 。下面是一些示例代码:
Flask
不支持异步调用。如果您正在寻找一个功能和感觉类似于Flask
但是异步的库,我建议您签出^{异步更新数据库应该不是问题;请参阅here以查找支持异步的数据库驱动程序。要处理文件,请签出^{} 。如果异步运行,您可以在单个线程上非常快速地运行服务器,而不会出现任何问题。在
Flask还不支持异步调用。在
要在后台创建和执行繁重的任务,可以使用https://flask.palletsprojects.com/en/1.1.x/patterns/celery/芹菜库。在
你可以参考一下: Making an asynchronous task in Flask
官方文件: http://docs.celeryproject.org/en/latest/getting-started/first-steps-with-celery.html#installing-celery
即使您在函数周围写了
@asyncio.coroutine()
,但它绝不是通知函数返回结果的awaited
。在Asyncio不适合这类任务,因为它们阻塞了I/O。它通常用于进行函数调用和快速返回结果。在
相关问题 更多 >
编程相关推荐