gpt4 book ai didi

python - 您如何按照文档规定的方式使用 python-daemon?

转载 作者:太空狗 更新时间:2023-10-29 22:07:50 25 4
gpt4 key购买 nike

我试图在 python 中创建一个守护进程,我遇到了 python-daemon 包。有趣的是,我看到它使用的最常见方式甚至不是 documentation 的方式。 ,这是很稀疏的,告诉你要做

import os
import grp
import signal
import daemon
import lockfile

from spam import (
initial_program_setup,
do_main_program,
program_cleanup,
reload_program_config,
)

context = daemon.DaemonContext(
working_directory='/var/lib/foo',
umask=0o002,
pidfile=lockfile.FileLock('/var/run/spam.pid'),
)

context.signal_map = {
signal.SIGTERM: program_cleanup,
signal.SIGHUP: 'terminate',
signal.SIGUSR1: reload_program_config,
}

mail_gid = grp.getgrnam('mail').gr_gid
context.gid = mail_gid

important_file = open('spam.data', 'w')
interesting_file = open('eggs.data', 'w')
context.files_preserve = [important_file, interesting_file]

initial_program_setup()

with context:
do_main_program()

相反,人们是这样使用它的:

#!/usr/bin/python
import time
from daemon import runner

class App():
def __init__(self):
self.stdin_path = '/dev/null'
self.stdout_path = '/dev/tty'
self.stderr_path = '/dev/tty'
self.pidfile_path = '/tmp/foo.pid'
self.pidfile_timeout = 5
def run(self):
while True:
print("Howdy! Gig'em! Whoop!")
time.sleep(10)

app = App()
daemon_runner = runner.DaemonRunner(app)
daemon_runner.do_action()

示例 here在这个线程中 How do you create a daemon in Python?

那么谁能告诉我应该如何按预期使用该软件包?找到 0 个按照文档指定的方式使用它的示例。

最佳答案

首先,您找不到好的文档的原因是,据我所知,从来没有人写过它。当 Ben Finney 提出 PEP 时,引起了很多兴趣,但是当他要求其他人接管该项目并支持它时,没有人这样做,所以......除了 PEP 之外,还有项目文档目录中的稀疏文档, 除了来源之外,真的没有什么可以解释的。

DaemonContext 是您创建守护进程的方式。它的 API 被广泛使用,并且是唯一被提议成为 stdlib 中公共(public)接口(interface)的一部分。来自 Debian、Ubuntu 和 RedHat/Fedora 项目的人员参与了最初的讨论,并且根据他们将发行版迁移到 systemd 的经验进行了更改。

DaemonRunner 包含一个基于 DaemonContext 的守护进程和一个控制工具 (ala apachectl)。这实现了一个“服务”,这只是许多其他不同方式中运行守护进程的一种方式。

通常,你不希望这样——如果你想构建一个“服务”,你通常只想使用 daemon.DaemonContext 实现守护进程,并让 systemdlaunchd 或它们的前辈通过调用该守护进程来管理服务。因此,为了简单起见,PEP 明确表示服务超出了 daemon 模块应该尝试的范围。

但是python-daemon 发行版中有服务代码。它没有完整的文档,因为它只是使用守护进程的一种方式的示例。

它看起来确实有效,而且多年来肯定得到维护和更新。所以,如果你想要一个 apachectl 类型的工具,我认为使用 DaemonRunner 是有意义的;只需确保您阅读了文档字符串并编写了一些测试以确保它正在执行您想要的操作。

关于python - 您如何按照文档规定的方式使用 python-daemon?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30408589/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com