Senzoukria 脚本编程里的“脚本在 2000 毫秒后被中断(死循环?)”
Senzoukria 的每一个脚本都跑在一个沙箱化的 worker 里,每次运行有 2 秒的预算。超出这个预算的脚本会被停掉,并写出“脚本在 2000 毫秒后被中断(死循环?)”;而一个从来没有启动起来的沙箱报的是另一条消息。
Senzoukria · 故障排除 · 更新于 2026 年 9 月
概要
- 超时
- “脚本在 {ms} 毫秒后被中断(死循环?)”
- 预算
- 每次运行 2 000 毫秒
- 沙箱没有被提供出来
- “沙箱不可用:{scheme} 协议在 {ms} 毫秒内没有返回任何内容(应用是否在 Tauri 之外启动?)”
- 影响
- 图表继续运行;这一次脚本运行返回一个错误
你会看到什么
脚本控制台和流水线那一条会把这次运行显示为失败,写着“脚本在 2000 毫秒后被中断(死循环?)”。如果沙箱压根就没有应答过,错误则是“沙箱不可用:{scheme} 协议在 {ms} 毫秒内没有返回任何内容(应用是否在 Tauri 之外启动?)”。
为什么会这样
脚本跑在一个沙箱化的 worker 里,没有网络、没有文件访问、也没有经纪商 API。一次在预算之内没有作出应答的运行会被停掉,这样一个坏掉的脚本就没办法把图表冻住。最常见的原因是一个永远不会结束的循环,或者是一个遍历所有 K 线的循环又套在另一个遍历所有 K 线的循环里面。这两种失败被刻意分开:曾经有两个半月的时间,一个没有启动起来的沙箱一直被读成一个很慢的脚本。启动 Python 引擎的耗时是单独计时的,不算在这 2 秒的预算里。
所以这条消息回答的是一个很具体的问题:这次运行没有在预算之内交回结果。它并不断言你的逻辑是错的,只是说在被停掉的那一刻它还没有算完。
如何解决
- 去找那些退出条件可能一直为假的 while 循环,以及那种永远不会被更新的计数器。
- 把遍历所有 K 线的嵌套循环,换成一次带着累计量往前走的单遍遍历。
- 在一个更短的图表范围上测一下,看看耗时是否随 K 线数量一起增长。
- 用脚本助手:它可以运行这个脚本、读到真实的错误,并提出一个修法。
- 碰到沙箱那条消息时请重启应用;它说明的是沙箱协议什么都没有提供出来。
它并不意味着什么
- 不是应用崩了:一个坏掉的脚本从来不会把图表弄死。
- 也不是语法错误:那一类会指向具体的行(“第 {line} 行失败”)。
何时联系技术支持
经过这些检查之后还是卡住?请用 菜单 → 问题反馈,或者发到 Senzoukria 的 Discord 上。请附上一个能最小化复现这次中断的脚本,并说明它跑在哪张图表、哪个周期上。
相关页面
同一栏目
其他语言版本
常见问题
- 这 2 秒的预算是按每根 K 线算,还是按每次运行算?
- 按每次运行算。C++ 工具链列出的是同一个上限:每次运行 2 秒,每次调用带最近 256 根 K 线。
- Python 脚本也是同样的预算吗?
- 它们的执行遵循同一套沙箱规则;只有 Python 引擎的启动耗时是在这 2 秒预算之外单独计时的。
- 脚本被停掉之后,图表上已经画出来的东西会消失吗?
- 不会。被停掉的只有这一次脚本运行,它返回一个错误;图表本身继续运行。