все Python 3multiprocessingпонятие
multiprocessing.Event
синхронизация
Флаг-событие между процессами: set() поднимает его, wait() ждёт подъёма, clear() сбрасывает. Простейший сигнал «можно начинать» или «пора остановиться».
Синтаксис
ev = ctx.Event(); ev.set(); ev.wait(timeout=None); ev.is_set(); ev.clear()
wait(timeout) по истечении срока не бросает исключение, а возвращает False — результат надо проверять. Типичный приём мягкой остановки: ребёнок крутит цикл while not stop.is_set(), а родитель делает stop.set() и join() — это безопаснее terminate(), который убивает процесс посреди записи. Примитив передают ребёнку аргументом Process при создании; через Queue или аргументы Pool его не передать — RuntimeError «should only be shared between processes through inheritance».
Примеры
import multiprocessing as mp
def worker(stop, done):
while not stop.is_set():
stop.wait(0.01)
done.set()
if __name__ == '__main__':
ctx = mp.get_context('spawn')
stop, done = ctx.Event(), ctx.Event()
p = ctx.Process(target=worker, args=(stop, done))
p.start()
print(done.wait(0.1)) # → False — таймаут без исключения
stop.set()
p.join()
print(done.is_set(), p.exitcode) # → True 0
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности