gpt4 book ai didi

python - 不同文件中的 Flask socket.io 消息事件

转载 作者:太空狗 更新时间:2023-10-30 01:26:23 28 4
gpt4 key购买 nike

套接字服务.py:

from flask import Flask, render_template
from flask_socketio import SocketIO, emit
from backend.database import db

app = Flask(__name__)
socketio = SocketIO(app, engineio_logger=True)

@socketio.on('connect')
def handle_connection():
from backend.electionAdministration import syncElections
syncElections()

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

选举管理.py:

from flask_socketio import SocketIO, emit
from bson.json_util import dumps
from backend.socketservice import socketio
from backend.database import db

def syncElections():
elections = db.elections.find()
emit('syncElections',dumps(res) , broadcast=True)

@socketio.on('createElection')
def createElection(data):
db.elections.insert({'title': data["title"]})
syncElections()

问题是,当 createElection 事件位于文件 electionAdministration.py 中时,它永远不会被调用。当我将它移动到 socketservice.py 时,它突然起作用了。

但我的意思是,我不能将所有内容都放在一个文件中,因为随着应用程序的增长,它会变得非常困惑。

最佳答案

您需要做的是在主模块中导入您的辅助模块,但是您需要在创建 socketio 变量之后执行此操作,因为否则您将遇到循环依赖错误。

例子:

from flask import Flask, render_template
from flask_socketio import SocketIO, emit
from backend.database import db

app = Flask(__name__)
socketio = SocketIO(app, engineio_logger=True)

@socketio.on('connect')
def handle_connection():
from backend.electionAdministration import syncElections
syncElections()

import electionAdministration # <--- import your events here!

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

此外,您需要考虑您的主要 Python 脚本不会被称为 socketservice,因为 Python 总是将顶层脚本命名为 __main__。因此,如果您将上述脚本作为主脚本启动,则第二个文件应按如下方式导入 socketio:

from __main__ import socketio

这是 Python 的一个小烦恼,当您想要一个有时作为主脚本运行但有时又希望它被另一个脚本导入的脚本时,情况会变得更糟。为了在这种情况下进行导入,我使用了以下技巧:

try:
from __main__ import socketio
except ImportError:
from socketservice import socketio

关于python - 不同文件中的 Flask socket.io 消息事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46622408/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com