Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Flask Socketio仅为第一条消息发出_Python_Flask_Socket.io_Sqlalchemy_Mqtt - Fatal编程技术网

Python Flask Socketio仅为第一条消息发出

Python Flask Socketio仅为第一条消息发出,python,flask,socket.io,sqlalchemy,mqtt,Python,Flask,Socket.io,Sqlalchemy,Mqtt,使用烧瓶Socketio和烧瓶Mqtt: @mqtt.on_message() def handle_mqtt_message(client, userdata, message): ### Extract from Payload ### payload_list = message.payload.decode().split() time_list = [int(x) for x in re.split(r'[-T:.]', payload_list[2])]

使用烧瓶Socketio和烧瓶Mqtt:

@mqtt.on_message()
def handle_mqtt_message(client, userdata, message):

    ### Extract from Payload ###
    payload_list = message.payload.decode().split()
    time_list = [int(x) for x in re.split(r'[-T:.]', payload_list[2])]
    tstmpObj = datetime(time_list[0], #Year
                        time_list[1], #Month
                        time_list[2], #Day
                        time_list[3], #Hour
                        time_list[4], #Minute
                        time_list[5]  #Sec
                        )

    ### make dict from payload data ###
    data = dict(mssid = random.randint(0,10000),
                fduid = "FDU-"+message.topic[-6:],
                evnty = payload_list[0],
                tstmp = tstmpObj.strftime("%a, %d %b %Y - %I:%M:%S %p"),
                locur = payload_list[1])

    ### Print dictionary ###
    print(data)

    ### Real-Time Alert on webpage ###
    socketio.emit('mqtt_message', data=data)

    ### Insert message into database ###
    with create_app().app_context():
        event = Evntlg(fduid = data['fduid'],
                        evnty = data['evnty'],
                        tstmp = tstmpObj,
                        locur = data['locur'])
        db.session.add(event)
        db.session.commit()
emit()只在第一个onMessage()上起作用,在第二个onMessage()之后不起作用。 我正在使用应用程序工厂和蓝图。 所有收到的消息仍正确插入数据库

##编辑## 与monkey patching相关的代码-在应用程序运行之前就开始修补

import eventlet
eventlet.monkey_patch()

from floodwatch import create_app, socketio

app = create_app()

if __name__ == "__main__":
    socketio.run(app, host='localhost', port=5000, debug=True)

我必须在终端中按CTRL-C键,然后再次启动它才能再次获取RT消息,但这也是第一次,而且在同一个会话中不会再次出现。

您使用的是eventlet还是gevent服务器?如果是,您是否对标准库进行了monkey修补?是的,我正在应用程序中尽早使用Eventlet进行monkey修补。事实上,执行的第一行代码是猴子补丁。谢谢你的回复@Miguel是因为在数据库插入期间,当前应用程序切换到我们在
with
语句中创建的应用程序吗?也许这就是插座不工作的原因。。。因为新的应用程序没有通过socketio(0_0)运行,我就在这里吗?