다른 여러 하위 프로세스를 생성하는 데몬 프로그램을 작성 중입니다. stop
스크립트를 실행 한 후에는 종료 할 때 주 프로세스가 실행을 계속합니다. 이렇게하면 혼란 스럽습니다.데몬 프로세스 종료 문제
import daemon, signal
from multiprocessing import Process, cpu_count, JoinableQueue
from http import httpserv
from worker import work
class Manager:
"""
This manager starts the http server processes and worker
processes, creates the input/output queues that keep the processes
work together nicely.
"""
def __init__(self):
self.NUMBER_OF_PROCESSES = cpu_count()
def start(self):
self.i_queue = JoinableQueue()
self.o_queue = JoinableQueue()
# Create worker processes
self.workers = [Process(target=work,
args=(self.i_queue, self.o_queue))
for i in range(self.NUMBER_OF_PROCESSES)]
for w in self.workers:
w.daemon = True
w.start()
# Create the http server process
self.http = Process(target=httpserv, args=(self.i_queue, self.o_queue))
self.http.daemon = True
self.http.start()
# Keep the current process from returning
self.running = True
while self.running:
time.sleep(1)
def stop(self):
print "quiting ..."
# Stop accepting new requests from users
os.kill(self.http.pid, signal.SIGINT)
# Waiting for all requests in output queue to be delivered
self.o_queue.join()
# Put sentinel None to input queue to signal worker processes
# to terminate
self.i_queue.put(None)
for w in self.workers:
w.join()
self.i_queue.join()
# Let main process return
self.running = False
import daemon
manager = Manager()
context = daemon.DaemonContext()
context.signal_map = {
signal.SIGHUP: lambda signum, frame: manager.stop(),
}
context.open()
manager.start()
는 stop
스크립트는 내가 무슨 일이 계속 모르고, 단지 한 줄 os.kill(pid, signal.SIGHUP)
이지만, 그 후 자식 프로세스 (작업자 프로세스 및 HTTP 서버 프로세스) 잘 종료하지만 주요 과정은 그냥 유지 그것은 돌아 오지 않는다.
"종료 중 ..."이 인쇄되어 있습니까? – grieve
나는 당신의 코드를 그대로 놔두고, 데몬 모듈을 빼고 나에게 도움이되었다. 데몬 모듈의 버전에 대한 링크를 줄 수 있습니까? Google 검색은 몇 가지 선택을 보여줍니다. – grieve
늦은 응답으로 죄송합니다. http://pypi.python.org/pypi/python-daemon/ – btw0