如何停止使用异步调用阻止我的 Flask 路由?
How do I stop blocking my Flask Route with an Async call?
我有一个函数,它创建一个新的库存项目并调用外部 API 来生成条形码。我如何在我的函数 returns 之后调用 urllib.request.urlretrieve(api_request_url, file_name)
,这样它就不会阻塞我的 API?
@api.route('/api/inventory/new/<id>', methods=['POST'])
@cross_origin()
def new_inventory(id):
name=request.json['name']
uid=request.json['uid']
item = Inventory(common_name=name, uid=uid)
api_request_url = "https://api.qrserver.com/v1/create-qr-code/?size=150x150&data={0}".format(uid)
file_name = "app/static/{0}.png".format(uid)
urllib.request.urlretrieve(api_request_url, file_name)
db.session.add(item)
db.session.commit()
return jsonify({'results': True})
简单的将Flask放入Gunicorn or uWSGI would prevent blocking the API. Creating a thread would be a second level of optimization, and finally for production you'd want to implement a task queue with something like Celery等WSGI容器中。
我有一个函数,它创建一个新的库存项目并调用外部 API 来生成条形码。我如何在我的函数 returns 之后调用 urllib.request.urlretrieve(api_request_url, file_name)
,这样它就不会阻塞我的 API?
@api.route('/api/inventory/new/<id>', methods=['POST'])
@cross_origin()
def new_inventory(id):
name=request.json['name']
uid=request.json['uid']
item = Inventory(common_name=name, uid=uid)
api_request_url = "https://api.qrserver.com/v1/create-qr-code/?size=150x150&data={0}".format(uid)
file_name = "app/static/{0}.png".format(uid)
urllib.request.urlretrieve(api_request_url, file_name)
db.session.add(item)
db.session.commit()
return jsonify({'results': True})
简单的将Flask放入Gunicorn or uWSGI would prevent blocking the API. Creating a thread would be a second level of optimization, and finally for production you'd want to implement a task queue with something like Celery等WSGI容器中。