Skip to content Skip to sidebar Skip to footer

Cancel Join After Sys.exit In Multiprocessing

On OSX I create a tree of processes with multiprocessing.Process. When I send a signal to a parent process, the process enters a join state: [INFO/MainProcess] process shutting dow

Solution 1:

You can avoid this by setting the daemon property to True on your child processes. From the multiprocessing.Process docs (emphasis mine):

daemon

The process’s daemon flag, a Boolean value. This must be set before start() is called.

The initial value is inherited from the creating process.

When a process exits, it attempts to terminate all of its daemonic child processes.

Note that a daemonic process is not allowed to create child processes. Otherwise a daemonic process would leave its children orphaned if it gets terminated when its parent process exits. Additionally, these are not Unix daemons or services, they are normal processes that will be terminated (and not joined) if non-daemonic processes have exited.

So if p.daemon == True, your parent process will just kill your child process, rather than join it. Note, though, that your daemonic processes cannot create their own children (as stated in the docs).

Solution 2:

I solved this by using os._exit(1) instead of sys.exit(1).

Post a Comment for "Cancel Join After Sys.exit In Multiprocessing"