Flask RuntimeError:您需要使用eventlet服务器

Flask RuntimeError:您需要使用eventlet服务器,flask,flask-socketio,Flask,Flask Socketio,我正在按如下方式设置我的Flask应用程序: from flask import Flask, render_template from flask_socketio import SocketIO app = Flask(__name__) app.config['SECRET_KEY'] = 'secret!' socketio = SocketIO() socketio.init_app(app) # All the code ... 运行uWSGI时,我传递以下参数: uwsgi

我正在按如下方式设置我的Flask应用程序:

from flask import Flask, render_template
from flask_socketio import SocketIO

app = Flask(__name__)
app.config['SECRET_KEY'] = 'secret!'
socketio = SocketIO()
socketio.init_app(app)

# All the code ...
运行uWSGI时,我传递以下参数:

uwsgi --socket app.sock --http-websockets --master --wsgi-file app.py --callable app
但这样做,我会得到以下错误:

RuntimeError:您需要使用eventlet服务器。有关更多信息,请参阅文档的部署部分

我怀疑我的代码返回的消息没有包装SocketIO系统,因此当使用uwsgi时,它使用eventlet失败


我应该为uwsgi提供什么服务才能使其工作?

uwsgi与gevent结合使用,而不是与eventlet结合使用。您的virtualenv中似乎安装了eventlet,这让人感到困惑。卸载eventlet,如果尚未安装gevent,则安装gevent,然后我认为您将获得更好的结果。

我确实做到了。但后来我删除了它,错误仍然存在。我还强制在Flask SocketIO上使用async_模式,运气不好:/Please用您现在得到的输出更新您的问题。我假设eventlet错误消息消失了?我实际上遇到了相同的错误,似乎即使我将gevent指定为gunicorn的worker类,它仍然与eventlet一起运行,服务器为eventlet初始化。记录消息。在我卸载eventlet之后,问题就消失了,它按预期使用gevent运行。对。我明确指出您必须卸载eventlet。如果您打算继续安装它,那么必须通过传递async_mode='gevent_uwsgi'来强制gevent。