Комментарии 2
Сходил по ссылке и взглянул на код семафора, всё в общем-то ясно. Только не понятно для чего нужно условие if not fut.canceled():
в блоке:
try:
try:
await fut
finally:
self._waiters.remove(fut)
except exceptions.CancelledError:
if not fut.cancelled():
self._value += 1
self._wake_up_next()
raise
Какой тут случай отрабатывается, можете пояснить, пожалуйста?
Здесь как раз проверяется вот этот случай:
Как думаете — что вызывало ошибку, связанную с отменой операции? Речь идёт о сценарии, когда объект
Future
владеет результатом (посетитель, на пейджер которого поступил сигнал), но задача, ожидающая этот объектFuture
, отменяется (посетитель отказывается усесться за столик).
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Рассуждения об asyncio.Semaphore