Python Glossary English

все Python 3multiprocessingпонятие

multiprocessing.BoundedSemaphore

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

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

Синтаксис

sem = ctx.BoundedSemaphore(value=1)

Ошибка лишнего release() ловится сразу, а не через час, когда ограничение «пул из трёх соединений» тихо превратилось в четыре. Исключение здесь ValueError «released too many times», тогда как threading.BoundedSemaphore бросает тоже ValueError, но с другим текстом. Как и у Semaphore, аргумент acquire() — block. Примитив передают ребёнку аргументом Process при создании; через Queue или аргументы Pool его не передать — RuntimeError «should only be shared between processes through inheritance».

Примеры

import multiprocessing as mp
if __name__ == '__main__':
    sem = mp.get_context('spawn').BoundedSemaphore(2)
    sem.acquire()
    sem.release()
    try:
        sem.release()
    except ValueError as e:
        print(e)  # → semaphore or lock released too many times

См. также

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