【发布时间】:2017-04-04 17:28:32
【问题描述】:
我正在使用一个烧瓶应用程序,该应用程序当前启动如下:
启动命令为python -m flask run,其中FLASK_APP指向__init.py__。
__init.py__ 只是将变量app 设置为Flask 的实例:
from .app import get_app
app = get_app()
if __name__ == "__main__":
# do nothing
pass
在我看来,flask 检测到此模块中设置的Flask 的全局实例并运行它们,即使我找不到任何文档。
现在我想集成 Flask-SocketIO,这需要封装烧瓶应用程序并运行套接字实例。 从文档看来,我应该可以从 main 运行它:
from .app import get_app
app, sio = get_app() # returns a Flask and a SocketIO instance now
if __name__ == "__main__":
sio.run(app)
print("Flask-SocketIO server launched")
但我从来没有看到预期的输出,并且套接字服务器似乎没有运行。对我来说,这听起来像是 flask 忽略了 main 函数,仍然只是启动它找到的任何 Flask 实例。
为什么会发生这种情况,即是否有相关文档?或者,我做错了 Flask-SocketIO 集成?
【问题讨论】:
-
if __name__ == "__main__"只会在您执行该文件时执行,而不是在您从其他地方导入它时执行。python -m flask查找名为app或application的变量或烧瓶对象。你不通过python mymainfile.py启动是有原因的吗? -
这对我来说很有意义。 Flask-SocketIO 的文档有一个short paragraph on
flask run,但我不明白它应该如何工作。启动代码是从一个我没有创建的相当复杂的 Node 脚本执行的,但我看不到python x.py的动机。
标签: python flask flask-socketio