Убийство одного ребенка после смерти другого - PullRequest
0 голосов
/ 06 октября 2019

Я хочу создать 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, но, похоже, работа завершена. Можно ли ее использовать?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...