python - 如何让 python 守护进程在停止时执行操作

标签 python daemon python-daemon start-stop-daemon

使用代码 I found here为了实现一个简单的守护进程,我想知道是否有任何方法可以让守护进程在停止之前执行操作。 这个想法是,在我的脚本中,我使用与外部设备的串行连接,并且我想在关闭守护程序之前彻底关闭它。

在 App() 类的 init 循环中,我正在做所有准备和初步设置。 然后,run 函数负责启动串行连接,丢弃前几个值并启动主循环(仅从串行连接检索值,并将它们保存到外部服务器)。

现在,我想做的是添加一些退出前操作,例如关闭串行连接,并获取发送到日志文件的数据的一些摘要。

有没有简单的方法可以做到这一点? (或者甚至是一个困难的问题)。

郑重声明,我还考虑过使用 this way创建一个守护进程,这可能是完成我尝试做的事情的更简单的方法。

这是我现在的代码:

#standard libraries from python
import logging, sys, time

#3rd party lib
import serial, requests
from daemon import runner

class App():
    def __init__(self):
        #some initialize also including the ones from the example
        serialport = '/dev/ttyACM0'

    def run(self):
        #Serial start
        ser = serial.Serial()
        ser.port = serialport
        ser.open()

        #First values discarded
        for i in range(30):
            ser.readline()[:-1]
        #Yes, that's ugly!
        i = 1

        #Main loop
        while True:
            # Serial retrieve
            values = ser.readline()
            r = requests.get(url, params=values)
            logger.info("%s values sent", str(i))
            values = ''
            i += 1
            time.sleep(3)

app = App()
#daemon starting stuff from example

感谢您的帮助!

最佳答案

这在 stdlib atexit 中有介绍。 。在更细粒度的级别上,为了让代码在删除对象之前执行,您可以实现 del方法。

关于python - 如何让 python 守护进程在停止时执行操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15073459/

相关文章:

Python 守护进程 : checking to have one daemon run at all times

node.js - 如何将 Node.js 应用程序作为自己的进程运行?

python - python 守护进程的单个实例(使用 python-daemon)

python - 在守护进程中运行线程+队列

python - 由于导入错误,无法同时运行 python 2 和 3

c++ - 作为守护进程运行提升线程

logging - Hadoop 守护进程日志

python - 我怎样才能通过 Selenium 点击 "javascript:void(0)"

python - 不明白这个 "object not callable"错误

python - PyQt:lineEdit 上的 ReturnPressed 方法连接到错误的按钮