Python Language Primitive de synchronisation: événement


Exemple

Concept

Utilisez un Event pour synchroniser la planification de plusieurs coroutines .

En d'autres termes, un événement est comme un coup de feu lors d'une course à pied: il permet aux coureurs de quitter les starting-blocks.

Exemple

import asyncio

# event trigger function
def trigger(event):
    print('EVENT SET')
    event.set()  # wake up coroutines waiting

# event consumers
async def consumer_a(event):
    consumer_name = 'Consumer A'
    print('{} waiting'.format(consumer_name))
    await event.wait()
    print('{} triggered'.format(consumer_name))

async def consumer_b(event):
    consumer_name = 'Consumer B'
    print('{} waiting'.format(consumer_name))
    await event.wait()
    print('{} triggered'.format(consumer_name))

# event
event = asyncio.Event()

# wrap coroutines in one future
main_future = asyncio.wait([consumer_a(event),
                            consumer_b(event)])

# event loop
event_loop = asyncio.get_event_loop()
event_loop.call_later(0.1, functools.partial(trigger, event))  # trigger event in 0.1 sec

# complete main_future
done, pending = event_loop.run_until_complete(main_future)

Sortie:

Consommateur B en attente
Un consommateur en attente
SET D'ÉVÉNEMENTS
Consommateur B déclenché
Consommateur A déclenché