Я использую curio
для реализации механизма двух задач, которые взаимодействуют с использованием объекта curio.Event
.Первая задача (называемая action()
) запускается первой, а awaits
событие, которое нужно установить.Вторая задача (называемая setter()
) запускается после первой и устанавливает событие.
Код выглядит следующим образом:
import curio
evt = curio.Event()
async def action():
await evt.wait()
print('Performing action')
async def setter():
await evt.set()
print('Event set')
async def run():
task = await curio.spawn(action())
await setter()
print('Finished run')
await task.wait()
curio.run(run())
Вывод следующий:
Event set
Finished run
Performing action
Это означает, что print('Performing action')
выполняется ПОСЛЕ print('Finished run')
, и это то, что я пытаюсь предотвратить - я ожидал, что вызов await evt.set()
также вызовет всех его официантов, и run()
не будет продолжаться до тех пор, пока не будут вызваны все официанты, что означает, что action()
будет продолжено ДО выполнения print('Finished run')
.Вот что мне хотелось бы получить:
Event set
Performing action
Finished run
Что я не так делаю?Есть ли способ изменить это поведение?Я хотел бы иметь больше контроля над порядком исполнения.
Спасибо