无法在安装了 gevent 的情况下运行 Flask 应用程序

Posted

技术标签:

【中文标题】无法在安装了 gevent 的情况下运行 Flask 应用程序【英文标题】:Unable to run Flask app with gevent installed 【发布时间】:2021-08-29 04:11:20 【问题描述】:

我有一个 Flask 应用程序,在安装 gevent 后无法运行。

这是我的 app.py 文件:

from app import create_app, socketio

app = create_app()

if __name__ == '__main__':
    socketio.run(app)

init.py(带有 create_app)

from flask_socketio import SocketIO
...

socketio = SocketIO()

def create_app(config_class=Config):
    app = Flask(__name__)
    app.config.from_object(Config)

    socketio.init_app(app, cors_allowed_origins='*')

    ...

    return app

当我运行python app.py 时,终端中显示的是:

 * Restarting with stat
 * Debugger is active!
 * Debugger PIN: 189-464-699

运行后,我的应用程序 (localhost:5000/) 将不会加载任何页面 - 它只会显示 Internal Server Error,即使它不是使用 websocket 的页面。我没有像往常一样在终端中看到任何请求。

当我运行python app.py时我期望什么

 * Serving Flask app "app" (lazy loading)
 * Environment: production
   WARNING: This is a development server. Do not use it in a production deployment.
   Use a production WSGI server instead.
 * Debug mode: on
 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
 * Restarting with stat
 * Debugger is active!
 * Debugger PIN: 335-570-116

当然,我希望能够加载网站页面。

如果我卸载 gevent,我可以得到预期的行为,但是,我得到这个错误: WebSocket transport not available. Install simple-websocket for improved performance.

simple-websocket 已安装。我认为这个错误意味着我应该安装 geventgevent-websocket

使用gevent uninstalled,我可以加载页面,但是我在终端收到上述transport not available错误,而使用websockets的站点页面在调试器中有这个错误:VM78:1 GET http://localhost:5000/socket.io/?EIO=4&transport=polling&t=Ne0kF52 net::ERR_CONNECTION_REFUSED

【问题讨论】:

听起来您正在启动一个您想要 ASYNC 但正在运行 SYNC 的进程。您的帖子中没有任何内容表明gevent。除非你以前是猴子补丁。 你可能需要猴子补丁:gevent.org/api/gevent.monkey.html 【参考方案1】:

开发环境使用socketio.run(app),最好使用eventlet。

【讨论】:

以上是关于无法在安装了 gevent 的情况下运行 Flask 应用程序的主要内容,如果未能解决你的问题,请参考以下文章

我无法安装 eventlet/gevent/greenlet

windows下安装gevent

并发之协程

python 并发编程 协程 gevent模块

无法将其他flas动画片段访问到动作脚本3

错误:无法为 gevent 构建***,这是安装基于 pyproject.toml 的项目所必需的