pythondaemon运行线程内部

2024-10-01 09:19:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用的是python守护进程,但是我在守护进程中有一个线程,可以偶尔检查串行端口:

context = daemon.DaemonContext(pidfile=daemon.pidfile.TimeoutPIDLockFile('/var/run/gpstemp.pid'),
                          uid = 0,
                          gid = 4,
                          umask = 0o002,
                          stdout = sys.stdout,  # change these for deployment
                          stderr =sys.stderr,   # change these for deployment
                          chroot_directory= None,
                          working_directory='/home/debian/gpstemp'
app = App()
with context:
    app.run()

线程执行以下操作:

^{pr2}$

我使用systemctl来启动和停止它,使用一个.service文件。 当我跑步时: sudo systemctl停止myservice

它等待60秒后返回。如何通过systemctl立即杀死服务中的线程。我考虑过将上下文传递给应用程序,然后重新定义:

 context.signal_map = {
     signal.SIGTERM: app.shutdown,
     signal.SIGHUP: app.shutdown,
     }

然后向应用程序添加一个关闭方法:

def shutdown(self, *args):
    self.exit.set()
    self.worker.join()

但是,这不会让上下文破坏PID,也不会正确退出上下文。我还应该在shutdown方法中添加什么才能使事情正常工作?在

库尔特


Tags: runselfappsignal进程stdoutsyscontext
1条回答
网友
1楼 · 发布于 2024-10-01 09:19:05

我能正确地理解,当你杀死你的主程序时,你也要杀死线程吗?您可以通过设置daemon=True来完成此操作:

def run(self):
    self.worker.daemon = True
    self.worker.start()

相关问题 更多 >