做实时行情接入时,我遇到过一个比较典型的问题: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

您需要登录后才可以回帖 登录 | 立即注册

精彩推荐

  • 为BERTopic安装需要的预训练SBERT模型
  • 在什么情况下使用弹窗模式和回退功能?
  • 爬网址做层级采集——以当当商品爬虫为例
  • 网络爬虫采集列表数据
  • UMAP的min_dist参数有什么作用?

热门用户

GMT+8, 2026-10-8 15:25