This library is an abstraction for communicating with child processes. The processes can run via supervisord or within an ION container. This code should provide a seamless interface to both allowing the user to start/stop/monitor processes without the concern of how the processes were run.
The specifics of communicating with the different types of processes is handled in PIDantic drivers. The drivers may implement any blocking IO with gevent.
To use PIDantic, you must create a PIDantic factory, and then you can use this factory to start processes.
An example of how to start an interact with a process:
from pidantic.supd.pidsupd import SupDPidanticFactory # Create our factory persistence_directory = "/tmp" persistence_name = "pidantic_test" factory = SupDPidanticFactory(directory=persistence_directory, name=persistence_name) # Start a process cmd = "sleep 100" name = "sleeper" dir = persistence_directory pid = self.factory.get_pidantic(command=cmd, process_name=name, directory=dir) pid.start() # Check process status processes = factory.reload_instances() factory.poll() # Print status of each process for name, process in processes.iteritems(): print "Process %s has status %s" % (name, process.get_status()) # Terminate all processes for name, process in processes.iteritems(): process.cleanup() # Shut down the factory factory.terminate()
Copyright 2013 University of Chicago