gpt4 book ai didi

Python:使用 PID 文件守护进程

转载 作者:太空狗 更新时间:2023-10-30 01:29:31 24 4
gpt4 key购买 nike

我正在尝试使用 daemon 模块来守护进程。代码看起来像这样

import sys
import time
import daemon
import lockfile


def do_things():
while True:
print "hello"
time.sleep(3)

def main()
context = daemon.DaemonContext(stdout=sys.stdout,
pidfile=lockfile.FileLock('test.pid'))

with context:
do_things()

现在您可以看到我正在创建一个锁定 PID 文件。现在我运行这个程序,它运行良好。现在为了测试 PID/daemon 功能,我使用

启动了另一个程序实例
python test.py

现在它不应该运行,因为先前的实例已经在运行。结果是第二个实例开始并进入循环(这个不是我测试函数中的 while 循环)。在此第二个实例上运行 strace 连续给出以下输出

 stat("/some-path-here/Talha@Fedora14-4e1a9720.21520", {st_mode=S_IFREG|0666,
st_size=0, ...}) = 0
select(0, NULL, NULL, NULL, {0, 100000}) = 0 (Timeout)

link("/some-path-here/Talha@Fedora14- 4e1a9720.21520",
"/somepath/test.pid.lock") = -1 EEXIST (File exists)

并且此痕迹会一直出现,直到进程被强制终止。锁定文件函数确实检测到现有锁定文件的存在,但问题是程序没有退出。我也希望显示此错误,表明 pid 文件已经存在。

如何做到这一点?

最佳答案

注意:此答案假定您使用的是 python-daemon 库。

守护程序库带有一个辅助类 daemonDaemonRunner,它负责创建 pid 文件。查看其内部结构,它使用 daemon.pidfile.TimeoutPIDLockFile 作为锁定文件的类型。

因此,看起来您可以通过以下任一方式解决此问题:

  • 使用daemon.DaemonRunner(我们发现这使用起来非常方便)
  • 将 pidfile 的类型更改为 daemon.pidfile.TimeoutPIDLockFile

关于Python:使用 PID 文件守护进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17212195/

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