Python Glossary English

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