Flask.socket在运行数据库查询时阻止调用

时间:2015-02-16 12:16:20

标签: python-2.7 flask flask-sqlalchemy flask-socketio

我正在尝试将socket_io用于我的烧瓶应用程序。问题是当我运行数据库查询时,如下面的url_route函数。第一次页面正确加载但在连续调用时,进程进入阻塞状态。甚至KeyboardInterrupt(Ctrl + c)也会终止其中一个python进程,我必须手动终止另一个进程。

一个明显的解决方案是使用缓存并使用另一个脚本在数据库上运行查询。有没有其他可能的解决方案可以避免运行单独的脚本?

@app.route('/status/<urlMap>')
def status(urlMap):
    dictResponse = {}
    data = models.Status.query.filter_by(urlmap = urlMap).first()
    if data.conversion == "DONE":
        dictResponse['conversion'] = 'success'
    if data.published == "DONE":
        dictResponse['publish'] = 'success'

    return render_template('status.html',status = dictResponse)

此外,在删除import flask.ext.socketio并使用app.run(host='0.0.0.0')代替socketio.run(app,host='0.0.0.0')时,该应用运行完美。所以我认为它的async gevent会以某种方式阻止这个过程。

1 个答案:

答案 0 :(得分:0)

像@Miguel一样正确地指出了问题。修补标准库的猴子解决了这个问题。

monkey.patch_all()解决了这个问题。