2016-02-19 5 views
2

J'essaie d'envoyer une diffusion lorsqu'une valeur extérieure change. Camonitor appelle le rappel lorsque la valeur change, et je souhaite informer tous les clients connectés que la valeur a changé et qu'ils doivent être actualisés.Python Flask SocketIO diffusion en dehors du contexte @socketio

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) 

Ma fonction de rappel est appelée avec succès lorsque la valeur change, mais la diffusion ne fonctionne pas. Si je déplace le fichier socketio.emit vers local_client_connect, cela fonctionne.

EDIT: Il semble être un problème connu https://github.com/miguelgrinberg/Flask-SocketIO/pull/213

Répondre

1

Oui, ce problème est connu, mais il a une solution très simple:

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