Jupyter Notebook 反复运行天勤策略内存涨:close 与内核习惯

前言

很多国内期货量化的研究阶段 在 Jupyter Notebook 里进行:改两行均线参数就 Shift+Enter 重跑,比整脚本重启方便。天勤 TqSdk 的 TqApi 在创建时会建立与行情、交易服务的连接并维护订阅;若每个单元格都 api = TqApi(...) 而从不 api.close(),旧连接和缓冲仍占内存,表现为越跑越卡、行情乱跳、甚至连接数超限------这在期货量化教学群里非常常见,并非天勤"泄漏",而是资源未释放的使用习惯。

本文说明 Notebook 场景下如何正确关闭 Api、与 wait_update 循环的关系、异步 register_update_notify 的注意点,并区分研究用 Notebook 与7×24 实盘进程。不默认你已区分 TqSim 与 TqKq。

一、期货研究在 Notebook 里常做什么

典型操作:拉几分钟 1 分钟或 5 分钟 K 线、看 datetime 是否推进、试一笔模拟 TargetPosTask、画均线。这些都需要 TqApi 活着。问题在于:同一内核里重复创建多个 Api,每个都在后台收国内期货行情,内存与连接叠加。

错误模式示意:

python 复制代码
# 单元格 1
api = TqApi(TqSim(), auth=TqAuth(...))
# 跑 while 或若干 wait_update

# 单元格 2 再次执行
api = TqApi(TqSim(), auth=TqAuth(...))  # 旧 api 未 close

二、正确习惯:单例 + 先关后建

python 复制代码
if "api" in globals() and api is not None:
    api.close()
api = TqApi(TqSim(), auth=TqAuth("快期账户", "密码"))

或研究一段结束后 Kernel → Restart ,再只创建一个 Api。长而久的 while True 建议放到 .py 用命令行跑,Notebook 只跑有限次 wait_update 做片段验证。

三、try/finally 保证 close

python 复制代码
api = TqApi(TqSim(), auth=TqAuth(...))
try:
    for _ in range(50):
        api.wait_update()
        # 观察 kl.iloc[-1].datetime 是否变化
finally:
    api.close()

回测单元格捕获 BacktestFinished 后同样应 close(),否则同一内核里第二次 TqBacktest 可能遇到资源未释放问题。

四、异步 notify 与 Notebook

若在协程 demo 里使用 register_update_notify,官方建议 async with api.register_update_notify() as update_chan;若手动拿 channel,用完需 await update_chan.close(),否则会泄漏。另:不要在协程里直接 wait_update(),天勤会报错;Notebook 里混同步 while 与 async task 时要只保留一套模型。

五、调试循环不要无限占着 Api

调试可加次数上限或 wait_update(deadline=...),避免单元格永远运行导致无法 close。实盘部署在国内服务器上时,用 systemd 等单进程守护,不要用合盖休眠的笔记本扛夜盘。

六、与期货实盘的关系

Notebook 适合验证"K 线 datetime 触发是否正确""一笔模拟单持仓是否变化";国内期货连续交易与风控,应放到独立 .py 进程,配置与实盘相同的 is_changing 规则,避免 Notebook 特有的一次性变量残留进生产。

总结

Jupyter 反复运行天勤策略 导致内存涨,主因是多个 TqApi 未 close()。期货量化研究应在单内核保持单 Api,重跑前先 close() 或重启内核;长循环用脚本;异步 notify 用 async with 或显式 close。

弄清 TqApi 是长连接资源,而不是普通变量,Notebook 体验会稳定很多。

FAQ

1)%reset 够吗?

建议先 api.close() 再 reset。

2)两个 Notebook 同账户?

每内核独立,避免同账户多端抢线。

3)内存仍涨?

检查是否缓存巨大 DataFrame;del 不再用的表。

4)能否 pickle Api?

不要;每会话重建。

风险提示

本文讨论开发环境,不构成投资建议。

相关推荐
田里的水稻9 小时前
IL_策略训练---Mamba\SSM神经网络种类六
人工智能·深度学习·神经网络·机器学习
天天代码码天天9 小时前
把老动画带给新一代孩子:用 C# WinForms、APISR 和 Vulkan 做一个视频超分工具
人工智能
空堂与归9 小时前
清华VPP2登顶RoboDojo:凭预测解耦突围GPT-6
人工智能·gpt·ai·具身智能
AliCloudROS9 小时前
MiniMax-H3 视频生成模型 — 一键部署与使用指南
人工智能·音视频
vx_Biye_Design9 小时前
springboot旅游管理系统18006-计算机课程设计、毕业设计
java·spring boot·后端·python·elasticsearch·django·课程设计
云端设计台9 小时前
技术方案评审画图难?AI文本可视化工具实测
人工智能
见闻小天地9 小时前
数据中心柴发出口保护怎么选?Emax 与 Tmax XT 的定位与分工
大数据·运维·人工智能·业界资讯
半亩码田9 小时前
C#转Python第4.7篇:logging:Python 的标准日志库
开发语言·python·c#
IT_陈寒9 小时前
为什么我的React组件一直在意外重渲染?
前端·人工智能·后端
Su米苏9 小时前
基于 Token 预算的上下文压缩控制器(Context Compaction Controller)
前端·数据库·人工智能