Python Glossary English

Python 3.4+Асинхронное программированиепонятие

asyncio.BoundedSemaphore

синхронизация

Семафор, который не даёт счётчику подняться выше начального значения: лишний release() бросает ValueError вместо того, чтобы молча пропустить лишнюю задачу.

Синтаксис

sem = asyncio.BoundedSemaphore(value=1)

Поведение при правильном использовании то же, что у asyncio.Semaphore, разница только в ошибке: Semaphore(2) после лишнего release() пустит трёх, а BoundedSemaphore(2) сразу скажет «released too many times». Поэтому для «не больше N одновременно» разумно брать именно его — ошибка в подсчёте видна сразу, а не через неделю под нагрузкой.

Примеры

import asyncio
async def main():
    sem = asyncio.BoundedSemaphore(1)
    async with sem:
        await asyncio.sleep(0.01)
    try:
        sem.release()  # лишний release
    except ValueError as e:
        print(e)  # → BoundedSemaphore released too many times
asyncio.run(main())

См. также

Открыть в полном глоссарииdocs.python.orgСообщить о неточности