我从定义了几个Web服务的应用程序开始。我能够通过命令行上的flask run
启动该应用程序。之后,我集成了flask-sckoetio(即我添加了行from flask_socketio import SocketIO, emit
和socketio = SocketIO(app)
),现在我不再能够通过flask run
启动服务器。
from flask import Flask, request, abort
from flask_socketio import SocketIO, emit
app = Flask(__name__)
socketio = SocketIO(app)
@app.route('/do_sth', methods=['POST'])
def do_sth():
return ""
我在控制台上收到以下消息:
* Serving Flask-SocketIO app "webservices.py"
* Forcing debug mode off
WebSocket transport not available. Install eventlet or gevent and gevent-websocket for improved perform
ance.
c:\program files\python36\lib\site-packages\flask_socketio\__init__.py:496: Warning: Silently ignoring
app.run() because the application is run from the flask command line executable. Consider putting app.
run() behind an if __name__ == "__main__" guard to silence this warning.
use_reloader=use_reloader, **kwargs)
所以我将代码更新为:
from flask import Flask, request, abort
from flask_socketio import SocketIO, emit
app = Flask(__name__)
socketio = SocketIO(app)
@app.route('/do_sth', methods=['POST'])
def do_sth():
return ""
if __name__ == '__main__':
socketio.run(app)
但是我仍然收到相同的错误消息,并且服务器无法启动。但是,如果我只执行脚本,则一切正常。但是为什么flask run
不再可能了?
答案 0 :(得分:0)
您是否安装了错误消息中提到的eventlet或gevent?
它们也在flask-socketIO documentation中的要求下列出。 尝试先安装它们。
安装其中一个后,您只需使用flask run
即可启动应用程序。
答案 1 :(得分:0)
仅当使用诸如__name__
之类的命令直接调用文件时,才因为变量"__main__"
等于python file.py
而发生这种情况。但是您的文件是导入的,并且他的__name__
变量设置为导入文件的模块的名称。
解决方案:
只需删除字符串if __name__ == "__main__":