내용으로 건너뛰기
Out of the Box
사용자 도구
로그인
사이트 도구
검색
도구
문서 보기
이전 판
Fold/unfold all
역링크
최근 바뀜
미디어 관리자
사이트맵
로그인
>
최근 바뀜
미디어 관리자
사이트맵
추적:
•
churn_prediction
•
quantum_computer
•
image_processing
•
game_programming
•
tiny_llm
•
windows_terminal
•
llm_game
python:event_manager
이 문서는 읽기 전용입니다. 원본을 볼 수는 있지만 바꿀 수는 없습니다. 문제가 있다고 생각하면 관리자에게 문의하세요.
====== Python: Event Manager ====== <code python event_manager.py> # -*-coding: utf-8 -*- __author__ = 'rex8312' import time class Singleton(type): _instances = {} def __call__(cls, *args, **kwargs): if cls not in cls._instances: cls._instances[cls] = super(Singleton, cls).__call__(*args, **kwargs) return cls._instances[cls] class EventManager(metaclass=Singleton): def __init__(self): self.listeners = dict() def register_listener(self, listener, event_type): self.listeners.setdefault(event_type, list()) self.listeners[event_type].append(listener) def unregister_listener(self, listener, event_type): if event_type in self.listeners: self.listeners[event_type].remove(listener) def post(self, event): event_type = type(event) listeners = self.listeners[event_type] for listener in listeners: listener(event) class TickEvent: def __init__(self): super().__init__() import random self.value = random.random() class TickHandler: def notify(self, event): print('tick', event.value) EventManager().post(TockEvent()) class TockEvent: def __init__(self): super().__init__() import random self.value = random.random() class TockHandler: def notify(self, event): print('tock', event.value) class CPUSpinner(object): def run(self): while True: EventManager().post(TickEvent()) time.sleep(1) if __name__ == '__main__': EventManager().register_listener(TickHandler().notify, TickEvent) EventManager().register_listener(TockHandler().notify, TockEvent) CPUSpinner().run() </code> {{tag>python "design pattern"}}
python/event_manager.txt
· 마지막으로 수정됨: 2024/03/23 02:42 저자
127.0.0.1
문서 도구
문서 보기
이전 판
역링크
Fold/unfold all
맨 위로