2012-10-25 19 views
5

Eventuali duplicati:
Event loop implementation for Python 3?base Event Loop in Python

Sto cercando di implementare un ciclo di eventi in python2.7. Mi piacerebbe essere in grado di attivare eventi basati su un evento del tempo e come risultato di un'altra azione in atto.

Capisco che posso fare uso di select per fare qualcosa di simile a questo.

E 'questa la strada giusta in avanti o c'è un modo migliore che mi manca?

+0

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

+0

È necessario specificare più contesto. Stai parlando di programmazione di sistema, programmazione socket, simulazione di eventi discreti? –

risposta

10

Un ciclo di eventi è un ciclo che gestisce/gestisce gli eventi. .

Un evento è qualcosa che si verifica nel sistema in cui alcune parti di codice potrebbero essere interessati a

All'inizio, tutti i componenti registrarsi per gli eventi, e dopo che, un evento init viene licenziato:

sto solo a fornire codice grezzo qui:

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

come un eventqueue è implementato e che la gerarchia Event() classe assomiglia viene lasciato come esercizio per il lettore. Prestare attenzione all'utilizzo di threading.(R)Lock s ecc. Per il metodo .pop().

Inoltre, è possibile avere elenchi listener separati per ogni tipo di evento. Un evento potrebbe quindi essere "licenziato" semplicemente chiamandolo (o il suo metodo .fire()) e disporre di un meccanismo per identificare tutti i suoi ascoltatori e quelli del genitore al fine di informarli sull'evento.

In ogni caso, gli ascoltatori possono decidere autonomamente su cosa fare e in base all'evento.