3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在 JoinQuant(聚宽)量化平台中,无论是 run_daily、run_weekly 还是 run_monthly 这类定时任务注册的函数,还是 handle_data 等其他回调函数,每个函数的最长运行时间限制均为 1800 秒(即 30 分钟)。
由于回测和模拟盘的服务器资源有限,为了防止恶意攻击或死循环导致资源被长期占用,平台在底层引擎中设置了严格的资源限制:
如果您的函数运行时间超过了 1800 秒,系统会强制关闭该进程,并在日志中抛出如下错误提示:
TimeoutError: function 'xxx' runs more than 1800 seconds
如果您的策略在定时任务中处理的数据量过大导致超时,建议采取以下方法进行优化:
使用性能分析工具定位瓶颈:
在策略代码最上方调用 enable_profile() 开启性能分析功能。运行一段较短时间的回测后,查看性能分析报告,找出耗时最长的代码行(如复杂的循环、低效的 DataFrame 操作等)进行针对性优化。
拆分任务到不同时间段:
如果一个函数需要处理全市场几千只股票的复杂计算,可以将其拆分。例如,利用 run_daily 在不同的时间点(如 09:30, 10:00, 10:30)分别处理一部分股票池,从而避免单个函数单次执行超过 1800 秒。
优化数据获取与计算逻辑:
for 循环逐行遍历 DataFrame。get_fundamentals),可以将其移至 before_trading_start 或盘后的定时任务中预先计算好并存入全局变量 g 中。内存回收:
如果涉及大量临时变量,可以引入 Python 的 gc 模块,在适当时机手动调用 gc.collect() 释放内存,避免因内存不足导致的性能下降或崩溃。