11 votes

Pourquoi les enfants ne parviennent-ils pas à mourir ?

J'attendais que la méthode terminate() tue les deux processus :

import multiprocessing
import time

def foo():
    while True:
        time.sleep(1)

def bar():
    while True:
        time.sleep(1)

if __name__ == '__main__':
    while True:
        p_foo = multiprocessing.Process(target=foo, name='foo')
        p_bar = multiprocessing.Process(target=bar, name='bar')
        p_foo.start()
        p_bar.start()
        time.sleep(1)
        p_foo.terminate()
        p_bar.terminate()
        print p_foo
        print p_bar

Exécuter le code donne :

...

Je m'attendais à :

...

7voto

Fedor Gogolev Points 4974

Parce que la fonction terminer envoie simplement un signal SIGTERM au processus, mais les signaux sont asynchrones, vous pouvez donc attendre un certain temps, ou attendre la terminaison des processus (réception du signal).

Par exemple, si vous ajoutez la chaîne time.sleep(.1) après la terminaison, il sera probablement terminé.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X