Pidfile具有过时检测和文件锁定功能,也可以用作上下文管理器或装饰器
项目描述
PidFile类具有以下特性:
过时检测
pidfile锁定(fcntl)
chmod(默认为0o644)
chown
自定义异常
上下文管理器、守护进程和日志记录
PidFile可以用作上下文管理器
from pid import PidFile import os with PidFile('foo') as p: print(p.pidname) # -> 'foo' print(p.piddir) # -> '/var/run' But you can modify it when initialize PidFile. print(os.listdir('/var/run')) # -> ['foo.pid'] # pid file will delete after 'with' literal.
使用PidFile与守护进程上下文管理器(例如python-daemon)时,也可以将日志记录到文件。这要求在守护进程启动时小心处理打开的文件,以避免关闭它们,这会导致日志记录出现问题。特别是,应保留打开的处理程序
import sys import logging import logging.config import daemon from pid impor PidFile logging.config.fileConfig(fname="logging.conf", disable_existing_loggers=False) log = logging.getLogger(__name__) PIDNAME = "/tmp/mydaemon.pid" def get_logging_handles(logger): handles = [] for handler in logger.handlers: handles.append(handler.stream.fileno()) if logger.parent: handles += get_logging_handles(logger.parent) return handles def daemonize(): file_preserve = get_logging_handles(logging.root) pid_file = PidFile(pidname=PIDNAME) with daemon.DaemonContext(stdout=sys.stdout, stderr=sys.stderr, stdin=sys.stdin, pidfile=_pid_file, files_preserve=files_preserve): run_daemon_job() print("DONE!") if __name__ == "__main__": daemonize()
这假设已经创建了一个logging.conf文件,有关日志记录的基本教程,请参阅基本教程。
装饰器
PidFile也可以用作装饰器
from pid.decorator import pidfile @pidfile() def main(): pass if __name__ == "__main__": main()
异常顺序
在默认模式下,PidFile会在做其他任何事情之前尝试获取文件锁。这意味着,在运行程序两次时,您通常会得到PidFileAlreadyLockedError而不是PidFileAlreadyRunningError。
如果您只想知道程序是否正在运行,最简单的方法是捕获PidFileError,因为它将捕获所有可能的PidFile异常。
行为
从版本2.0.0开始的变化
现在 pid 与守护进程上下文管理器(如 python-daemon)友好地协同工作,其中 PidFile 上下文管理器作为参数传递。新的修正行为将确保在获取/检查锁时确定进程环境。先前行为会在实例化类时确定进程环境,这可能导致在实例化 PidFile 后进行进程分叉时 PID 的错误确定。
终止时的 pidfile 清理使用 atexit 模块完成。默认的 SIGTERM 处理程序无法干净地退出,因此注册到 atexit 的函数将不会执行。一个触发 atexit 注册的清理函数的自定义处理程序将覆盖默认的 SIGTERM 处理程序。如果已配置先前的信号处理程序,则不会覆盖它。
项目详细信息
下载文件
下载适用于您的平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。
源代码发行版
构建发行版
pid-3.0.4.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 0e33670e83f6a33ebb0822e43a609c3247178d4a375ff50a4689e266d853eb66 |
|
MD5 | af607e6e2a51129e3fef516b7994c85b |
|
BLAKE2b-256 | 46459e551a0e30d68d18334bc6fd8971b3ab1485423877902eb4f26cc28d7bd5 |
pid-3.0.4-py2.py3-none-any.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | af2bf11c5d637bba8a80ce3368279c5eca28f08e201ac828538e1b9ad9e35ef9 |
|
MD5 | 4f60a922260748e5e414394f7af297cf |
|
BLAKE2b-256 | e0307ebdc66dff1611756d4b38340effdb470aa2693c8789a8fef0bd8dd9332a |