Остановить скрипт при выполнении условия в потоке мультипроцессинга
Как при работе с мультипроцессингом остановить весь скрипт, если в одном из процессов будет достигнуто условие? То есть, есть мультипроцессинговый пул с аргументами, аргумент попадает в функцию, в которой происходят определенные вычисления и если это вычисление верно - то дальше вычисления проводить не нужно и все активные нужно прекратить. Как это сделать? Пробовал 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 шт):
Автор решения: vadim vaduxa
→ Ссылка
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)