2009-11-18 81 views
8

파이썬에서 mutliprocessing 모듈을 사용하여 프로세스를 만들고 싶지만 서브 프로세스를 생성 한 프로세스가 종료 된 후에도 계속 실행되도록하십시오.파이썬 멀티 프로세싱 모듈을 사용하여 시작된 서브 프로세스 분리하기

하위 프로세스 모듈과 Popen을 사용하여 필요한 기능을 사용할 수 있지만 스크립트가 아닌 함수로 코드를 실행하려고합니다. 그 이유는 pyro (python 원격 객체) 객체를 만드는 것을 단순화하기 위해서입니다. 다중 프로세스를 사용하여 별도의 프로세스에서 pyro 개체 요청 처리기를 시작하려고하지만 pyro 개체를 지원하는 프로세스가 계속 실행되는 동안 주 프로세스를 종료하고 싶습니다.

답변

0

당신이하려는 것은 데몬 프로세스를 시작하는 것입니다. PEP-3143python-daemon 패키지를 살펴보십시오.

은 파이로 훑어 보았다, 그리고 그들은 내가 마지막으로 내가 원하는 걸 얻었

Pyro/ext/daemonizer.py 
+0

답장을 보내 주셔서 감사합니다. 최근에 저 해결책을 가로 질러 왔 더라면, 나는 동의한다. 그러나 python-daemon은 프로그램이 데몬으로 시작하여 반환하지 않는 하나의 기능을 갖는보다 표준적인 패러다임을 목표로합니다. daemon.DaemonContext()와 : 나는의 라인을 따라 뭔가를하고 싶은 some_daemon_loop()를 continue_with_this_function_after_daemon_has_launched() 나는 어떤 제안을 주셔서 감사합니다 . – glenn

+0

전에 pyro를 보지 못했습니다. 그들의 코드를 간단하게 살펴보면, "데몬"클래스는 스레드 디스패처와 같은 것으로 별도의 프로세스가 아닙니다. 코드에서 어디에서 포크를 실행하든 상관 없습니다. Pyro에는 데몬 리얼 데몬 기능을위한 모듈이 포함되어 있습니다. – JimB

4

자신의 daemonzing 모듈을 포함 보인다. 코드 개선을위한 제안에 감사드립니다.

def start_server(): 
    pyrodaemon = Pyro.core.Daemon() 
    #setup daemon and nameserver 
    #Don't want to close the pyro socket 
    #Need to remove SIGTERM map so Processing doesn't kill the subprocess 
    #Need to explicitly detach for some reason I don't understand 
    with daemon.DaemonContext(files_preserve=[pyrodaemon.sock],signal_map={signal.SIGTERM:None},detach_process=True): 
     while running: 
      pyrodaemon.handleRequests(timeout=1.0) 
    #when finished, clean up 
    pyrodaemon.shutdown() 

def main(): 
    p = Process(target=start_server) 
    p.daemon=True # Need to inform Process that this should run as a daemon 
    p.start() 
    time.sleep(3.0) # Important when running this program stand alone: Must wait long enough for start_server to get into the daemon context before the main program exits or Process will take down the subprocess before it detaches 
    do_other_stuff_not_in_the_daemon() 
+1

데몬 단어가 악용되고 있습니다;) * Process.daemon을 True로 설정하지 마십시오. 이것은 멀티 프로세싱이 출구에서 아이를 죽이려고 시도한다는 것을 의미합니다 (혼란 스럽습니까?). 이것이 위의 코드에서 SIGTERM을 잡아 detach_process를 설정해야하는 이유라고 생각합니다. - http://docs.python.org/library/multiprocessing.html#multiprocessing.Process.daemon – JimB