Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Python Multiprocessing Exit Elegantly How?

People also ask

How do you exit multiprocessing in Python?

Call kill() on Process The method is called on the multiprocessing. Process instance for the process that you wish to terminate.

How lock in multiprocessing Python?

Python provides a mutual exclusion lock for use with processes via the multiprocessing. Lock class. An instance of the lock can be created and then acquired by processes before accessing a critical section, and released after the critical section. Only one process can have the lock at any time.

How do I know if multiprocessing is working?

We can check if a process is alive via the multiprocessing. Process. is_alive() method.

How do you start a process twice in Python?

AssertionError: cannot start a process twice Instead, to restart a process in Python, you must create a new instance of the process with the same configuration and then call the start() function.


The reason you are not seeing this happen is because you are not communicating with the subprocess. You are trying to use a local variable (local to the parent process) to signal to the child that it should shutdown.

Take a look at the information on synchonization primatives. You need to setup a signal of some sort that can be referenced in both processes. Once you have this you should be able to flick the switch in the parent process and wait for the child to die.

Try the following code:

import multiprocessing
import time

class MyProcess(multiprocessing.Process):

    def __init__(self, ):
        multiprocessing.Process.__init__(self)
        self.exit = multiprocessing.Event()

    def run(self):
        while not self.exit.is_set():
            pass
        print "You exited!"

    def shutdown(self):
        print "Shutdown initiated"
        self.exit.set()


if __name__ == "__main__":
    process = MyProcess()
    process.start()
    print "Waiting for a while"
    time.sleep(3)
    process.shutdown()
    time.sleep(3)
    print "Child process state: %d" % process.is_alive()