0

我正在尝试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')应用程序时运行完美。所以我认为它的异步 gevent 调用以某种方式阻塞了进程。

4

1 回答 1

0

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

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

于 2015-07-10T18:46:40.760 回答