我使用的是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方法中添加什么才能使事情正常工作?在
库尔特
我能正确地理解,当你杀死你的主程序时,你也要杀死线程吗?您可以通过设置
daemon=True
来完成此操作:相关问题 更多 >
编程相关推荐