使用环境:国金证券 QMT 交易端 2.1.33.0,内置 Python 3.12。策略使用 save_py_key / get_py_key 保存运行状态,数据较大,需要分片保存。
遇到以下问题,希望了解接口的正式行为及推荐处理方式:
1. 读取空键
读取尚未创建的键时,曾收到 KeyError: 不存在key;另一次对新测试键读取时,返回成功但值为空。
请问这两种结果分别代表什么?是否有官方推荐的方式区分“键从未创建”和“读取异常或未读到最新值”?
2. 保存超时
一次分片保存调用约 19 秒后返回:
KV_SAVE_FAILED:300000
error id: 121,超时时间已到
phase=chunk
请问 save_py_key 返回超时后,这次写入是否可能仍在后台继续执行并最终生效?这种情况下,是否有官方推荐的读回、重试或确认方式?
3. 同一键的写入顺序
在隔离测试键上,依次写入旧版、新版、旧版,每次都读回一致,最终读到的是旧版。
如果旧请求因超时或其他原因晚到,同一键上是否存在旧请求覆盖新结果的可能?接口是否提供写入顺序保证、版本校验或类似原子条件更新的能力?
4. 重启后如何确认最新状态
实际策略曾出现状态恢复时分片内容或结构不匹配的问题。当前保存方案使用分片、索引和哈希校验,但担心索引被旧请求覆盖,或者重启时读到完整但过期的索引。
请问 get_py_key 在成功写入、客户端重启或网络重连后,是否保证读到最新已确认版本?对于多分片状态的发布和恢复,官方是否有推荐方案或示例?
5. 跨进程及测试键管理
如果同一账户或策略命名空间可能被多个进程访问,官方推荐如何避免同时写入或相互覆盖?测试过程中创建的键,是否有正式支持的删除方式?
已有测试结果供参考:隔离测试中,8 个合成分片及索引保存、逐片读回成功;关闭并重新登录 QMT 后再次读取,也全部一致。但这只能说明当次测试通过,尚不足以确认超时、旧请求晚到或并发时的行为。
希望获得接口文档、错误码说明或适用于券商 QMT 内置 Python 的官方示例。谢谢! |