如何在python线程和SocketIo.start\u background\u任务线程之间共享数据?
目标:如何在python线程和SocketIo.start\u background\u任务线程之间共享数据?,python,multithreading,flask,flask-socketio,Python,Multithreading,Flask,Flask Socketio,目标: run(app)启动服务器并使用while循环无限地向多个Javascript(客户端)发送数据 数据来自另一个while循环,但是一旦脚本运行(独立于客户端连接)以供其他使用,循环就需要启动 当前: 对于第一点,我已经有了以下代码: def background_thread(): while True: socketio.emit('response',{'data': value},namespace='/test') @socketio.on('conn
def background_thread():
while True:
socketio.emit('response',{'data': value},namespace='/test')
@socketio.on('connect', namespace='/test')
def test_connect():
global thread
with thread_lock:
if thread is None:
thread = socketio.start_background_task(target=background_thread)
emit('response', {'data': 'Connected'})
if __name__ == '__main__':
socketio.run(app, debug=True, host='localhost', port=args.portNum)
socketio.start\u background\u task
可以无限地与默认python线程共享数据
另外一个问题:如何允许多个客户端连接到一台服务器
谢谢大家 我不确定我是否理解您的问题,但如果您要问的是如何独立于客户端连接启动线程,您可以在启动服务器之前立即启动它:
if __name__ == '__main__':
socketio.start_background_task(my_other_thread)
socketio.run(app, debug=True, host='localhost', port=args.portNum)
如果您需要同步这两个线程,例如,当my\u other\u thread
有一个新值要发送时,background\u thread
立即将其拾取并发送,那么您可以使用标准线程同步原语。在这种情况下,您可能需要一个事件
实例。请参阅标准库中的Python线程文档
关于如何允许多个客户端连接,您无需为此做任何事情。您现有的服务器将允许来自多个客户端的连接。非常感谢!当你说每当我的线程有新的值时,后台线程就会发送这些值,我仍然感到困惑。它们不是在同一个线程中,在socketio.start\u background\u任务(我的另一个线程)中吗??另一个问题是,假设我有多个后台任务,它们是否可以像普通python线程那样使用队列类彼此共享数据?是的,您可以使用
队列来同步两个或多个线程。但是,如果您使用的是eventlet或gevent,那么您需要使用这些框架附带的Queue对象,而不是Python中的Queue对象。我想到一点,那就是,为什么我不能使用全局变量在线程之间共享数据而不是使用队列类?您可以使用全局变量在线程之间共享数据,这不是问题。问题是同步线程,如何使一个线程唤醒,并在另一个线程达到特定状态时执行某些操作。这不能用全局变量来完成。