首页 > 解决方案 > 在消息上从 flask-socketio 更改全局实例的状态

问题描述

我目前正在将flask-socketio 运行到一个线程中。在特定的 socketio 事件中,我想更改主线程中全局对象的状态,即执行一个可能会更改其实例变量值的函数

在我的实际程序中,'self.params' 是 chromedrivers 的列表。当发出信号时,会删除或添加驱动程序。这有什么区别吗?Chromedriver 是一个不可腌制的对象。

这是一个烧瓶 socketio 代码,它是一个简化的示例:

from gevent import get_hub
get_hub().NOT_ERROR += (KeyboardInterrupt,)

from flask import Flask
from flask_socketio import SocketIO, emit
import threading

app = Flask(__name__)
app.config['SECRET_KEY'] = 'mysecret'
socketio = SocketIO(app, cors_allowed_origins="*")

class SomeObj():
    def __init__(self, param):
        self.param = param
    def query(self):
        self.param += 1
        return

global_obj = SomeObj(0)

@socketio.on('msg')
def handle_msg():
    global_obj.query()

def start():
    def run():
        socketio.run(app, port=5005)

    SocketIOThread = threading.Thread(target=run)
    SocketIOThread.daemon = True
    SocketIOThread.start()

if __name__ == '__main__':
    start()
    while True:
        a = input()
        if a == '`':
            break
        else:
            print(global_obj.param)

我怎样才能做到这一点?我每次只得到0。

标签: pythonflask-socketio

解决方案


推荐阅读