VeighNa · 第 2 章 EventEngine 事件引擎 章节摘要:本章精读 VeighNa 的框架心脏—— (全文件仅 145 行)。EventEngine 是一个基于 Queue + Thread + 定时器的发布订阅事件总线:生产者(网关收到行情、策略发信号、定时器)把 Event 投进队列,消费者(一个后台线程)按事件 type 分发给订阅者。它的精妙在于用极简代码搭起了整个框架的数据流:每个 Tick/订单/成交都通过它流转,UI、OMS、策略各自订阅自己关心的事件 type。本章先拆 EventEngine 的初始化与生命周期,再讲 register/put/process 三大核心机制。本章共 2 节,前置依赖为第 1 章。
章节摘要:本章精读 VeighNa 的框架心脏——
vnpy/event/engine.py(全文件仅 145 行)。EventEngine 是一个基于 Queue + Thread + 定时器的发布订阅事件总线:生产者(网关收到行情、策略发信号、定时器)把 Event 投进队列,消费者(一个后台线程)按事件 type 分发给订阅者。它的精妙在于用极简代码搭起了整个框架的数据流:每个 Tick/订单/成交都通过它流转,UI、OMS、策略各自订阅自己关心的事件 type。本章先拆 EventEngine 的初始化与生命周期,再讲 register/put/process 三大核心机制。本章共 2 节,前置依赖为第 1 章。
阅读完本章,你应当能够:
engine.py 的 145 行源码。register)与通用处理器(register_general)。_run 主循环为什么用 timeout=1 而不是无限阻塞。事件驱动的精髓:生产者只管
put,消费者只管register,互不认识,靠事件 type 解耦。
Event/HandlerType 数据结构;__init__ 的六个私有成员;_run 主循环为什么 timeout=1;_run_timer 定时器线程;start/stop 生命周期;为什么不用 asyncio。
put 投递事件;_process 两段式分发(专属 + 通用);register/unregister 专属处理器去重;register_general 通用处理器;EVENT_TIMER 心跳的用途。
本章第 01 节(初始化/生命周期) ──► 第 02 节(注册/投递/分发机制) │ ▼ 下一章(第 3 章 数据建模体系)
前置知识:
queue.Queue、threading.Thread、time.sleep)后续延伸:
on_xxx 回调怎么 put 事件