我正在尝试以传统的启动/停止/重新启动样式实现python守护程序,以将使用者控制在消息传递队列中。我已经成功地使用python-daemons创建了一个使用者,但是我需要多个监听器来处理大量消息。这导致我在run函数以及os.kill对stop函数的调用中实现了多处理库:
def run(self):
for num in range(self.num_instances):
p = multiprocessing.Process(target=self.start_listening)
p.start()
def start_listening(self):
with open('/tmp/pids/listener_{}.pid'.format(os.getpid()), 'w') as f:
f.write("{}".format(os.getpid()))
while True:
// implement message queue listener
这几乎可以,但是我真的很想让子进程正常关闭并做一些清理,包括日志记录。我了解了信号处理程序,因此我将其切换signal.SIGTERM到signal.SIGINT并将其添加到守护程序类。
但是,在测试时,子进程将被杀死,但似乎从未调用过graceful_stop函数(文件保留,日志记录未记录等)。我是否为子进程实现了错误的处理程序?有没有更好的方法来使多个侦听器具有单个控制点?
慕容3067478
相关分类