分享flask_socketio配置时遇到的一些问题

发布时间:2024年01月21日

flask_socketio

1.前言

flask_socketio应用启动后,在控制台中,存在着flask_socketio这些烦人的log

一堆的get和post几秒一个让我什么都看不清,因此想要关掉log
请添加图片描述

结果没想到,找了很多办法半天去不掉flask_socketio的log

试过了

  • socketio初始时禁用logger,发现默认值就是false,不用禁用
  • socketio初始时禁用engineio_logger,默认值也是false
  • import logging进行调整,socketio.logger.setLevel(logging.WARNING),没用

2.async_mode

之后突然发现调整初始时的async_mode就可以正常进行logging配置,我原本是:

socketio = SocketIO(
    app,
    async_mode='threading',
    cors_allowed_origins="*",  # 允许所有来源连接,也可以指定特定的来源
    logger=True,
    engineio_logger=True
)

把其中的async_mode改成”eventlet“(默认值也是这个),log就正常了

但是又出现了新的问题,整个程序卡在某个地方了

找了下发现是背景循环任务socket_io.start_background_task卡住了:

self.socket_io.start_background_task(self.emit_available_gpu_info)

在我的代码中,用到了time.sleep函数,这和eventlet相冲突,在eventlet框架下应当用eventlet.sleep

    def emit_available_gpu_info(self):
        while True:
            available_gpu_info = self.module_gpu_management.get_available_gpu_info()
            try:
                self.socket_io.emit('gpu_status', available_gpu_info)
                Log.info(f"广播可用GPU信息:{available_gpu_info}")
            except Exception as e:
                Log.error(f"广播可用GPU信息时出错:{e}")
            eventlet.sleep(5)

改好后,程序正常

3.threading

之后测试时又出现了新的问题,我的一个线程,每次发送emit信息都”似乎“是正常的,因为flask_socketio的日志中看到了发包信息

但是客户端却一点动静没有,也就是说flask_socketio emit没有反应

又又又找了半天,发现因为是我之前用的threading,似乎也与这个框架冲突?

这也是我的一个背景任务:

thread = threading.Thread(target=self.thread_target_mission_starter)
thread.start()

改成socket_io.start_background_task后一切正常

self.socketio.start_background_task(self.thread_target_mission_starter)
文章来源:https://blog.csdn.net/XIAOXIANG233233/article/details/135733819
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。