2

使用我在这里找到的代码来实现一个简单的守护程序,我想知道是否有任何方法可以让守护程序在停止之前执行一个操作。这个想法是,在我的脚本中,我正在使用与外部设备的串行连接,并且我想在关闭守护程序之前干净地关闭它。

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

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

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

作为记录,我还考虑过使用这种创建守护进程的方法,这可能是一种更简单的方法来做我想做的事情。

这是我的代码现在的样子:

#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

谢谢您的帮助!

4

1 回答 1

3

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

于 2013-02-25T18:25:28.413 回答