如何通过异步调用停止阻止我的Flask Route?

时间:2015-09-15 16:24:21

标签: python asynchronous flask python-3.4

我有一个功能,它创建一个新的库存项目并调用外部API来生成条形码。如何在我的函数返回后调用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})

1 个答案:

答案 0 :(得分:2)

简单地将Flask放在诸如Gunicorn or uWSGI之类的WSGI容器中可以防止阻止API。创建一个线程将是第二级优化,最后对于生产,您需要实现一个类似Celery的任务队列。