【发布时间】:2013-03-11 18:26:30
【问题描述】:
我有这个 Django cron 作业脚本(我为此使用了 kronos,这很棒)。
由于我每分钟都会触发此作业,因此我想确保没有另一个脚本实例已经在运行。如果有之前的作业正在运行,那么我想跳过当前的执行。
我知道我可以使用锁定文件来做到这一点,但这不是很可靠,并且当您在执行过程中重新启动时可能会导致问题(您必须清除锁定文件)等。
使用 Python(在本例中为 Django)执行此操作的最佳方法是什么?
编辑:我的目标是 Linux,很抱歉漏掉了这个。
【问题讨论】:
-
在什么平台上?如今,锁定文件在大多数 Unix/Linux 平台上都非常可靠:将 os.open 与 O_CREAT|O_EXCL 一起使用,以保证只有单个进程可以访问该文件以及对应于基于内存或交换的文件系统的路径(如 tmpfs : /tmp 在 Solaris 上,/run 或 /var/run 在 Linux 上)解决了您的重启问题。唯一的潜在问题是如果您的进程崩溃、未清理等...
-
另一种选择是使用基于内核的信号量。
-
对不起,Linux :-)
-
我也很想知道这个:)
标签: python django locking cron-task