2012-10-25 2 views
5
에서

가능한 중복 : 내가 python2.7에서 이벤트 루프를 구현하기 위해 노력하고
Event loop implementation for Python 3?기본 이벤트 루프 파이썬

. 나는 타임 이벤트와 다른 액션이 일어나서 이벤트를 트리거 할 수 있기를 바란다.

나는 이와 비슷한 것을하기 위해 select을 사용할 수 있음을 이해합니다.

이것이 올바른 방법인가요, 아니면 누락 된 더 나은 방법이 있습니까?

+0

http://stackoverflow.com/questions/6812397/event-loop-implementation-for-python-3 – avasal

+0

더 많은 컨텍스트를 지정해야합니다. 시스템 프로그래밍, 소켓 프로그래밍, 개별 이벤트 시뮬레이션에 대해 이야기하고 있습니까? –

답변

10

이벤트 루프는 이벤트를 처리/처리하는 루프입니다. .

이벤트는 일부 코드 부분에 관심이있을 수있는 시스템에서 발생하는 뭔가가 시작되는 시점에

, 모든 구성 요소가 이벤트에 등록을 한 후, init 이벤트는 해고 :

난 그냥 여기에 원시 코드를 제공하고있다 : eventqueue이 구현되는 방법

listeners = [component1, component2, component3] 
eventqueue.add(InitEvent()) 
while True: 
    event = eventqueue.pop() 
    for listener in listeners: 
     listener.handle_event(event) 

하고 무엇 Event() 클래스 계층 구조는 독자들에게 연습 문제로 남겨 것 같습니다. .pop() 메서드에 threading.(R)Lock 등을 사용하는 데주의하십시오.

또한 각 이벤트 유형에 대해 별도의 수신기 목록을 사용할 수 있습니다. 따라서 이벤트는 이벤트를 알리기 위해 자신과 부모의 청취자를 모두 식별 할 수있는 메커니즘이 있으므로 이벤트를 호출 (또는 .fire() 메소드)하여 "해고"할 수 있습니다.

어쨌든 청취자는 이벤트에서 수행 할 작업과 수행 할 작업을 스스로 결정할 수 있습니다.