Flask 如何在套接字处理程序之间共享变量?

Flask 如何在套接字处理程序之间共享变量?,flask,flask-socketio,Flask,Flask Socketio,有没有办法让多个套接字处理程序访问同一个变量?下面是一些伪代码,显示了我想要实现的目标,但是我得到了shared\u variable的UnboundLocalVariable异常 shared_variable = None @socketio.on('initialize') def initialize_variable(data): shared_variable = data @socketio.on('print') def print_variable(): p

有没有办法让多个套接字处理程序访问同一个变量?下面是一些伪代码,显示了我想要实现的目标,但是我得到了
shared\u variable
的UnboundLocalVariable异常

shared_variable = None

@socketio.on('initialize')
def initialize_variable(data):
    shared_variable = data

@socketio.on('print')
def print_variable():
    print str(shared_variable)

有什么想法吗?提前谢谢

如果要使用全局变量,必须在函数中声明它,否则每个函数都有自己的局部变量

shared_variable = None

@socketio.on('initialize')
def initialize_variable(data):
    global shared_variable
    shared_variable = data

@socketio.on('print')
def print_variable():
    global shared_variable
    print str(shared_variable)
但是请注意,如果您这样做,您的所有客户机将共享同一个变量。一个更有趣的解决方案是使用用户会话存储您的值,因为这样每个客户机都有自己的值

@socketio.on('initialize')
def initialize_variable(data):
    session['shared_variable'] = data

@socketio.on('print')
def print_variable():
    print str(session['shared_variable'])

需要注意的是,
会话
在Socket.IO事件中的行为与常规HTTP请求路由中的行为有一些不同。当客户端连接时,HTTP用户会话被复制到Socket.IO端,从那时起,您在Socket.IO中所做的任何更改都只对该客户端触发的事件可用。在Socket.IO事件中对会话所做的更改在HTTP请求中不可见。

如果要使用全局变量,必须在函数中声明它,否则每个函数都有自己的局部变量

shared_variable = None

@socketio.on('initialize')
def initialize_variable(data):
    global shared_variable
    shared_variable = data

@socketio.on('print')
def print_variable():
    global shared_variable
    print str(shared_variable)
但是请注意,如果您这样做,您的所有客户机将共享同一个变量。一个更有趣的解决方案是使用用户会话存储您的值,因为这样每个客户机都有自己的值

@socketio.on('initialize')
def initialize_variable(data):
    session['shared_variable'] = data

@socketio.on('print')
def print_variable():
    print str(session['shared_variable'])

需要注意的是,
会话
在Socket.IO事件中的行为与常规HTTP请求路由中的行为有一些不同。当客户端连接时,HTTP用户会话被复制到Socket.IO端,从那时起,您在Socket.IO中所做的任何更改都只对该客户端触发的事件可用。在Socket.IO事件中对会话所做的更改在HTTP请求中不可见。

谢谢!关于我应该将什么放入会话变量,是否有任何最佳实践。远程服务的通道存根怎么样?您可以在Socket.IO用户会话上编写任何Python对象。谢谢!关于我应该将什么放入会话变量,是否有任何最佳实践。远程服务的通道存根怎么样?您可以在Socket.IO用户会话上编写任何Python对象。