【问题标题】:Flask SocketIO raises a ValueErrorFlask SocketIO 引发 ValueError
【发布时间】:2019-07-11 01:22:55
【问题描述】:

我正在尝试设置一个可以使用SocketIO 的 Flask 服务器,但是它不起作用并且它返回给我以下错误:

ValueError: signal only works in main thread

这是我为烧瓶环境设置的:

export FLASK_APP=application.py
export FLASK_DEBUG=1

然后我会像往常一样跑步,并且会在我开始使用 SocketIO 之前工作:

flask run

这是我的application.py 代码,它非常简单,但也许有帮助:

import os

from flask import Flask
from flask_socketio import SocketIO, emit

app = Flask(__name__)
app.config["SECRET_KEY"] = os.getenv("SECRET_KEY")
socketio = SocketIO(app)


@app.route("/")
def index():
    return "Hello, world"

【问题讨论】:

  • 我已经阅读了那个帖子,但是它没有帮助,因为在我的烧瓶服务器上打开调试模式时我无法使用 SocketIO。
  • 我无法重现该问题。也许你应该包括详细信息,例如 python 版本、Flask 版本和 Flask-SocketIO 版本

标签: python flask flask-socketio


【解决方案1】:

我正在玩 flask_socketio 只是为了了解它是如何工作的。所以我的解决方法可能并不理想。

我跟着终端跑了

$ export FLASK_ENV=production 
$ flask run

我收到以下警告,但我的测试应用程序正常运行

Serving Flask app "<applicationname>.py"
 * Environment: production
   WARNING: Do not use the development server in a production environment.
   Use a production WSGI server instead.
 * Debug mode: off
[2019-03-20 09:58:09,131] WARNING in __init__: Flask-SocketIO is Running under Werkzeug, WebSocket is not available.

【讨论】:

    【解决方案2】:

    在当前版本的 Flask-SocketIO 中,flask run 启动服务器的方法只能在使用 Flask 开发服务器时使用,不推荐使用,因为它不支持 WebSocket。

    我建议您按照以下方式更改您的应用程序:

    import os
    
    from flask import Flask
    from flask_socketio import SocketIO, emit
    
    app = Flask(__name__)
    app.config["SECRET_KEY"] = os.getenv("SECRET_KEY")
    socketio = SocketIO(app)
    
    @app.route("/")
    def index():
        return "Hello, world"
    
    if __name__ == '__main__':
        socketio.run(app, debug=True)
    

    然后运行应用程序:

    python application.py
    

    【讨论】:

      猜你喜欢
      • 2021-12-09
      • 2015-06-10
      • 2015-12-19
      • 2016-04-19
      • 1970-01-01
      • 2023-03-10
      • 2012-11-13
      • 2018-06-18
      • 2018-08-21
      相关资源
      最近更新 更多