Я хотел бы спросить об asyncio.donition. Я не знаком с этой концепцией, но я знаю и понимаю замки, семафоры и очереди с моих учеников. Я посмотрел на источник. Основная функциональность достигается с помощью FIFO фьючерса. Каждый ожидающий коратика добавляет новое будущее и ждет его. Другая Coroutine может вызовать notify () , который устанавливает результат одного или, необязательно больше будущего из FIFO, и который разбудит такое же количество кораток ожидания. Действительно просто до этого момента. < /P>
Однако реализация и использование более сложны, чем эта. Ожидание коратики должна сначала приобрести блокировку, связанную с условием, чтобы иметь возможность ждать (и wait () выпускает его во время ожидания). Также уведомление должно приобрести замок, чтобы иметь возможность уведомлять (). Это приводит к оператору < /code> перед каждой операцией: < /p>
async with condition:
# condition operation (wait or notify)
< /code>
или иначе runtimeerror < /code> ocds. Какой ресурс нам нужен для защиты с помощью замка? В Asyncio всегда может быть только одна Coroutine, выполняемая в цикле событий, нет «критических разделов», как известно из потока. < /p>
Действительно ли эта блокировка действительно необходима (почему?) Или для совместимости только с кодом потока? то есть создание < /p>
async with condition:
< /code>
в основном необязательный no-op. < /p>
Подробнее здесь: https://stackoverflow.com/questions/515 ... ility-with
Есть ли у блокировки Asyncio.dondition другая цель, помимо совместимости с потоком. Кондиционирование? ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Как взаимодействовать между традиционным потоком и потоком asyncio в Python?
Anonymous » » в форуме Python - 0 Ответы
- 44 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Как взаимодействовать между традиционным потоком и потоком asyncio в Python?
Anonymous » » в форуме Python - 0 Ответы
- 33 Просмотры
-
Последнее сообщение Anonymous
-