import sys import os from time import sleep import signal from multiprocessing import Process from multiprocessing.managers import BaseManager import threading class _SuperVdsmManager(BaseManager): pass def func(): return 'func' class _SuperVdsm(object): def runChild(self): proc = Process(target=func) proc.start() proc.terminate() def _zombieReaper(signum, frame): print "sigchld!" def startSuper(): try: address = '/home/lvroyce.sock' if os.path.exists(address): os.unlink(address) signal.signal(signal.SIGCHLD, _zombieReaper) try: manager = _SuperVdsmManager(address=address, authkey='abc') manager.register('instance', callable=_SuperVdsm) server = manager.get_server() servThread = threading.Thread(target=server.serve_forever) servThread.setDaemon(True) servThread.start() while servThread.isAlive(): servThread.join(5) except: raise finally: if os.path.exists(address): os.unlink(address) except Exception: sys.exit(1) def main(): sv = Process(target=startSuper) sv.start() sleep(2) _manager = _SuperVdsmManager(address='/home/lvroyce.sock', authkey='abc') _manager.register('instance') _manager.connect() _svdsm = _manager.instance() _svdsm.runChild() sleep(4) _svdsm.runChild() if __name__ == '__main__': main()