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)