Ожидает ли сопрограмма установки asyncio.Event, которое будет гарантированно уведомляться каждый раз при установке события?
Официант гарантированно только заметит, что set()
произошло, пока оно ожидало, даже если за ним сразу следовал clear()
. Нет никакой гарантии, что оно будет активировано столько раз, сколько состояние было изменено с ложного на истинное.
Эта более сильная гарантия потребует дополнительного счетчика на объекте, который больше не будет простым логическим значением "мероприятие". Это также было бы несовместимо с threading.Event
, что не обеспечивает его.
Но как сделать это чисто?
Чистый способ был бы для Event
только для того, чтобы отметить, что «что-то» произошло, и что метаинформация , что произошло (включая счетчик, если необходимо), хранится рядом. Таким образом, объект события выполняет одну цель: сигнализировать официантам о том, что произошло событие, которого они ждали, и они могут сами выполнить необходимое количество циклов.
Если официантам нужно реагировать наset()
немедленно , тогда ожидание asyncio.sleep(0)
- это путь, но в Asyncio это отчасти запах дизайна. Трудно сказать, как это исправить, не зная больше о вашем коде.