Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何停止使用异步调用阻塞我的Flask路由?_Python_Asynchronous_Flask_Python 3.4 - Fatal编程技术网

Python 如何停止使用异步调用阻塞我的Flask路由?

Python 如何停止使用异步调用阻塞我的Flask路由?,python,asynchronous,flask,python-3.4,Python,Asynchronous,Flask,Python 3.4,我有一个函数,它创建一个新的库存项目,并调用一个外部API来生成条形码。在我的函数返回后,如何调用,urllib.request.urlretrieve(api\u request\u url,file\u name),以便它不会阻止我的api @api.route('/api/inventory/new/<id>', methods=['POST']) @cross_origin() def new_inventory(id): name=request.json['nam

我有一个函数,它创建一个新的库存项目,并调用一个外部API来生成条形码。在我的函数返回后,如何调用,
urllib.request.urlretrieve(api\u request\u url,file\u 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})
@api.route('/api/inventory/new/',methods=['POST'])
@交叉起源()
def新库存(id):
name=request.json['name']
uid=request.json['uid']
物料=库存(通用名称=名称,uid=uid)
api_请求_url=”https://api.qrserver.com/v1/create-qr-code/?size=150x150&data={0}.格式(uid)
文件_name=“app/static/{0}.png”。格式(uid)
urllib.request.urlretrieve(api\u请求\u url,文件名)
db.session.add(项)
db.session.commit()
返回jsonify({'results':True})

只需将烧瓶放在WSGI容器中即可防止API堵塞。创建一个线程将是第二个优化级别,最后,对于生产,您希望实现一个任务队列,如下所示

产生一个新的、短期的线程将是许多方法之一。但更重要的问题是:您将如何处理错误处理?如果还不清楚QR码生成是否会成功,那么您的API已经返回“ok”表示已经创建了一个新项目,您真的可以吗?这是另一天的问题,我很好奇今天如何创建新线程或进行异步调用。