все 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Сообщить о неточности