MCPcopy Create free account
hub / github.com/shidenggui/easyquant / EventEngine

Class EventEngine

easyquant/event_engine.py:14–79  ·  view source on GitHub ↗

事件驱动引擎

Source from the content-addressed store, hash-verified

12
13
14class EventEngine:
15 """事件驱动引擎"""
16
17 def __init__(self):
18 """初始化事件引擎"""
19 # 事件队列
20 self.__queue = Queue()
21
22 # 事件引擎开关
23 self.__active = False
24
25 # 事件引擎处理线程
26 self.__thread = Thread(target=self.__run, name="EventEngine.__thread")
27
28 # 事件字典,key 为时间, value 为对应监听事件函数的列表
29 self.__handlers = defaultdict(list)
30
31 def __run(self):
32 """启动引擎"""
33 while self.__active:
34 try:
35 event = self.__queue.get(block=True, timeout=1)
36 handle_thread = Thread(target=self.__process, name="EventEngine.__process", args=(event,))
37 handle_thread.start()
38 except Empty:
39 pass
40
41 def __process(self, event):
42 """事件处理"""
43 # 检查该事件是否有对应的处理函数
44 if event.event_type in self.__handlers:
45 # 若存在,则按顺序将时间传递给处理函数执行
46 for handler in self.__handlers[event.event_type]:
47 handler(event)
48
49 def start(self):
50 """引擎启动"""
51 self.__active = True
52 self.__thread.start()
53
54 def stop(self):
55 """停止引擎"""
56 self.__active = False
57 self.__thread.join()
58
59 def register(self, event_type, handler):
60 """注册事件处理函数监听"""
61 if handler not in self.__handlers[event_type]:
62 self.__handlers[event_type].append(handler)
63
64 def unregister(self, event_type, handler):
65 """注销事件处理函数"""
66 handler_list = self.__handlers.get(event_type)
67 if handler_list is None:
68 return
69 if handler in handler_list:
70 handler_list.remove(handler)
71 if len(handler_list) == 0:

Callers 2

test_set_nowMethod · 0.90
__init__Method · 0.85

Calls

no outgoing calls

Tested by 1

test_set_nowMethod · 0.72