做实时行情接入时,我遇到过一个比较典型的问题:WebSocket 一直保持连接,数据也在正常接收,但运行一段时间后,消息延迟越来越明显,内存占用也不断上涨。 后来发现,问题是数据接收速度超过了业务处理速度。比如每秒收到 1000 条消息,但程序只能处理 700 条,那么每秒就会多出 300 条,时间一长自然会产生积压。 一、不要在WebSocket回调里做重计算我比较推荐把“接收”和“处理”拆开。不建议直接在 `on_message()` 中进行数据库写入、复杂计算或者策略判断: ```python def on_message(ws, message): data = json.loads(message) save_to_database(data) calculate_indicator(data) run_strategy(data) ``` 更合理的方式是先把消息放入队列,再由 Worker 负责处理: ```python def on_message(ws, message): message_queue.put_nowait(message) def worker(): while True: message = message_queue.get() try: process_message(message) finally: message_queue.task_done() ``` 这样即使数据库或计算逻辑偶尔变慢,也不会直接阻塞 WebSocket 的消息接收。
|
共 0 个关于本帖的回复 最后回复于 2026-9-8 16:17