在@SocketIO上下文之外进行Python SocketIO广播

在@SocketIO上下文之外进行Python SocketIO广播,python,flask,websocket,flask-socketio,Python,Flask,Websocket,Flask Socketio,我试图在外部值更改时发送广播。当值更改时,Camonitor调用回调,我想通知所有连接的客户端该值已更改,它们需要刷新 from flask import Flask from epics import caget, caput, camonitor from flask_socketio import SocketIO, emit app = Flask(__name__) socketio = SocketIO(app) @socketio.on('connect') def local

我试图在外部值更改时发送广播。当值更改时,Camonitor调用回调,我想通知所有连接的客户端该值已更改,它们需要刷新

from flask import Flask
from epics import caget, caput, camonitor
from flask_socketio import SocketIO, emit

app = Flask(__name__)
socketio = SocketIO(app)

@socketio.on('connect')
def local_client_connect():
    print "Client connected"


def update_image_data(pvname, value, **kw):
    # broadcast event
    print "Sending broadcast"
    socketio.emit('newimage')


if __name__ == "__main__":
    # start listening for record changes
    camonitor("13SIM1:cam1:NumImagesCounter_RBV", writer=None, callback=update_image_data)
    socketio.run(app, debug=True)
当值更改时,我的回调函数被成功调用,但广播不起作用。 如果我将socketio.emit移动到本地\客户端\连接,它就会工作


编辑:这似乎是一个已知问题

是的,这是一个已知问题,但它有一个非常简单的解决方法:

def update_image_data(pvname, value, **kw):
    # broadcast event
    print "Sending broadcast"
    with app.app_context():
        socketio.emit('newimage')