Я хочу создать 2 процесса - один быстрый и один медленный (хотя в моем случае я бы не знал, что к чему). Я хочу, чтобы после быстрого умирает и медленный, не завершив свою функцию.
Добавление join()
проблематично, поскольку в моем конкретном случае я не знаю, какой из них является быстрыми join()
-ing они оба будут ждать медленнее ... Кроме того, добавление time.sleep()
также проблематично, потому что я не знаю, сколько времени займет мой фактический быстрый процесс ...
Есть ли способ заставить отцовский процесс осознавать оба дочерних процесса и убить один, если другой умер? (Мысль о добавлении цикла while, проверяющего is_alive()
для обоих процессов каждую секунду, но это кажется странным и плохим, потому что я не буду знать, где join()
их ...
In [1]: import multiprocessing as mp
In [2]: def slow():
...: import time; time.sleep(3); print('Done')
...:
In [3]: def fast():
...: raise Exception('Fast')
In [15]: def main():
...: import time
...: s = mp.Process(target=slow)
...: f = mp.Process(target=fast)
...: f.start()
...: s.start()
...: while s.is_alive() and f.is_alive():
...: time.sleep(1)
...: if s.exitcode or f.exitcode:
...: s.terminate(); print('s terminated')
...: f.terminate(); print('f terminated')
В этой попытке не используется join
, но, похоже, работа завершена. Можно ли ее использовать?