下面是一个示例实现 EventManager 的代码,使用 Python 实现多线程事件监听与处理,支持添加事件监听器、触发事件和自定义事件回调函数。

import threading
import time

class EventManager:
    def __init__(self):
        self.event_listeners = {}
        self.event_lock = threading.Lock()
        self.ticking_counter = 0

    def add_event_listener(self, event, callback):
        with self.event_lock:
            if event not in self.event_listeners:
                self.event_listeners[event] = []
            self.event_listeners[event].append(callback)

    def send_event(self, event, data):
        with self.event_lock:
            if event in self.event_listeners:
                for callback in self.event_listeners[event]:
                    callback(data)

    def start(self):
        threading.Thread(target=self._tick).start()

    def _tick(self):
        for i in range(100):
            time.sleep(0.1)
            self.send_event('ticking', [i])
            self.ticking_counter += 1
            if self.ticking_counter == 2:
                self.send_event('onParking', [])
                self.ticking_counter = 0

def update_list(data):
    print('Update list:', data)

def parking_ended():
    print('Parking ended')

if __name__ == '__main__':
    event_manager = EventManager()
    event_manager.add_event_listener('ticking', update_list)
    event_manager.add_event_listener('onParking', parking_ended)
    event_manager.start()

在这个示例实现中,EventManager 类有两个主要方法:add_event_listener 和 send_event。add_event_listener 用于添加事件监听器,send_event 用于触发事件。EventManager 内部使用一个字典 event_listeners 来存储每个事件对应的回调函数列表。在 send_event 方法中,会遍历对应事件的回调函数列表,并依次调用回调函数。

在 start 方法中,会启动一个独立的线程来执行 _tick 方法。_tick 方法中的循环会不断发送 'ticking' 事件,并在每次发送后检查 ticking_counter 的值。当 ticking_counter 等于 2 时,会发送 'onParking' 事件,并将 ticking_counter 重置为 0。

在示例的 if name == 'main': 部分,我们创建了一个 EventManager 实例,并添加了 'ticking' 事件和 'onParking' 事件的回调函数。然后调用 start 方法启动 EventManager 的线程。这样,在循环中不断触发 'ticking' 事件,并在满足条件时触发 'onParking' 事件,从而触发相应的回调函数。

EventManager 类通过多线程机制实现了事件监听与处理,并提供了灵活的事件处理机制,方便用户根据需要定制事件回调函数。

总结

  • EventManager 类使用字典存储事件监听器,支持添加、触发事件和自定义事件回调函数。
  • 通过多线程机制,EventManager 类可以在独立线程中持续触发事件,并调用相应的回调函数。
  • 示例代码展示了如何使用 EventManager 类处理定时事件和特定事件,并演示了事件回调函数的调用。

应用场景

  • 游戏引擎:处理玩家操作、游戏逻辑等事件。
  • 异步编程:处理网络请求、数据库操作等异步任务。
  • GUI 应用程序:处理用户界面事件。
  • 数据采集:处理数据更新、数据分析等事件。
Python EventManager 实现:多线程事件监听与处理

原文地址: https://www.cveoy.top/t/topic/qCCI 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录