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

前言

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

本文说明 Notebook 场景下如何正确关闭 Api、与 wait_update 循环的关系、异步 register_update_notify 的注意点,并区分研究用 Notebook7×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 反复运行天勤策略 导致内存涨,主因是多个 TqApiclose()。期货量化研究应在单内核保持单 Api,重跑前先 close() 或重启内核;长循环用脚本;异步 notify 用 async with 或显式 close。

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

FAQ

1)%reset 够吗?

建议先 api.close() 再 reset。

2)两个 Notebook 同账户?

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

3)内存仍涨?

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

4)能否 pickle Api?

不要;每会话重建。

风险提示

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

相关推荐
不懂的浪漫1 小时前
AI 时代还需要买课吗?我用 Skills + Markdown + HTML 搭了一套自学系统
前端·人工智能·html·skill
愚公搬代码1 小时前
【愚公系列】《移动端AI应用开发》017-Android端应用开发(网络通信与API集成)
android·人工智能
零梦ing1 小时前
零基础将deepseek和mimo接入codex(codex管理工具版)
人工智能
前端的阶梯1 小时前
Conda 开发 Python 程序完全指南
前端·人工智能·后端
程序员cxuan1 小时前
AI 时代,如何超过大多数人
人工智能·后端·程序员
库拉大叔1 小时前
GPT-5.5 多模态能力实战:2026 年 AI 工具进阶使用指南
人工智能·gpt·aigc
海兰1 小时前
【红楼梦:第二篇】梦境漫游,详细设计指南
人工智能·游戏
code bean1 小时前
【LangChain】 文本分割器全景指南:从 RecursiveCharacterTextSplitter 到各类分割器对比
人工智能·自然语言处理·langchain
kida_yuan1 小时前
不想花钱写了一个 Flask 知识库
运维·python