Остановить скрипт при выполнении условия в потоке мультипроцессинга

Рейтинг: 0Ответов: 1Опубликовано: 18.05.2023

Как при работе с мультипроцессингом остановить весь скрипт, если в одном из процессов будет достигнуто условие? То есть, есть мультипроцессинговый пул с аргументами, аргумент попадает в функцию, в которой происходят определенные вычисления и если это вычисление верно - то дальше вычисления проводить не нужно и все активные нужно прекратить. Как это сделать? Пробовал sys.exit, но он почему-то вообще ничего не делает. На месте STOP SCRIPT его вставлял:

main(arg):
...
if x > 0:
   STOP SCRIPT IF CONDITION IS TRUE

if __name__ == '__main__':
with multiprocessing.Pool(processes=8) as pool:
   pool.map(main, [ARGS])

Ответы

▲ 1Принят

imap_unordered прервет выполнение, если raise произойдет

import multiprocessing, time

def main(arg):
    if arg == 2:
        raise UserWarning(arg)
    time.sleep(arg)
    return arg

if __name__ == '__main__':
    with multiprocessing.Pool(processes=8) as pool:
        [*r] = pool.imap_unordered(main, list(range(5)))
    print(r)