Flask SocketIO引发ValueError

时间:2019-02-17 14:09:03

标签: python flask flask-socketio

我正在尝试设置可以使用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"

2 个答案:

答案 0 :(得分:2)

我正在使用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.

答案 1 :(得分:0)

在当前的Flask-SocketIO版本中,仅在使用Flask开发服务器时才可以使用flask run方法来启动服务器,因为不支持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