unix 同步同时启动的两个不同进程

o8x7eapl  于 2022-11-23  发布在  Unix
关注(0)|答案(1)|浏览(98)

我有两个独立的cron服务,它们都触发了相同的python脚本。我只想执行其中一个调用,而另一个应该退出。有什么方法可以实现这个行为吗?
基于进程开始时间创建一个锁文件(忽略时间戳中的秒数部分,这样时间对于这两个进程都是唯一的),并使用此名称访问一个文件。但这种特殊的方法会带来一些原子性问题。

sc4hvdpw

sc4hvdpw1#

锁定文件应该是正确的解决方案,因为仅在文件不存在的情况下通过触摸创建文件是原子性的:

from pathlib import Path

def create_lockfile(filename):
    try:
        Path(filename).touch(exist_ok=False)
        return True
    except FileExistsError:
        return False

touch的源代码中,您会发现创建的文件带有O_EXCL标志,这意味着该文件仅在尚不存在时才会创建。
在解决了原子问题之后,您只需要确保所有进程都尝试创建同一个(!)文件,这样您就可以实际使用该文件作为锁。

相关问题