gpt4 book ai didi

python - 如何在 Thread 中运行 python-socketio?

转载 作者:行者123 更新时间:2023-11-28 22:28:01 28 4
gpt4 key购买 nike

我在 Flask 中使用了 python-socketio,我想启动 Thread 实例并在信号到来时从中发出信号。在 Flask 应用程序中,我有:

import threading

def game(my_sio):
my_sio.emit('log', data = "Game started!")
return

@sio.on('start')
def startGame(sid):
t = threading.Thread(target = game, args = [sio])
t.start()

有一个简单的例子,但它不起作用。在服务器日志中我得到:

engineio:a16afb90de2e44ab8a836498086c88f6: 正在发送数据包 MESSAGE 数据 2["log","Game started!"]

但客户永远不会得到它!

Javascript:

socket.on('log', function(a) {
console.log(a);
});

最佳答案

所以对我有用的是在 Flask + python-socketio 中切换到线程模式,如下所述: https://python-socketio.readthedocs.io/en/latest/server.html#standard-threads

我之前使用过 eventlet,这导致了问题。

另一种解决方案

可以使用 eventlet,但线程必须是非阻塞的,因此标准线程在这里是无用的。

要创建线程,必须使用 socketio.Server 方法 start_background_task,它将函数作为参数。

同样在线程任务中,使用 eventlet.sleep() 而不是 time.sleep() 方法。

但是如果没有一些 hack 和使用 eventlet 附带的 monkey_patch 事件可能无法工作。 See more in documentation .但如果仍然存在问题,在 monkey_patch 之前的导入部分中添加空的 eventlet.sleep() 就可以解决问题。在网络某处的讨论中找到它。

关于python - 如何在 Thread 中运行 python-socketio?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43801884/

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