有没有办法防止两个Python程序同时执行同一个二进制文件?

8
我有两个Python脚本,定期(类似于cronjobs)需要调用外部程序。如果同时调用该程序(我们无法控制),会导致数据错误,因此我们需要一种同步调用该二进制文件的方法。是否有一种方法可以做到这一点,最好仅使用Python标准库?

在执行外部二进制文件之前,每个脚本都要检查基于文件的锁定。 - James Mills
如果程序是外部的,那么两个脚本可以共享一个简单的“锁定”文件。 - alex
我不认为标准库中有现成的解决方案;但是有lockfile - James Mills
1个回答

5

因此,如果不使用第三方库,例如filelock,则必须执行以下操作:

import os
from subprocess import check_call

if os.path.exists("/var/run/foo.ock"):
    print("Backing off...")
    raise SystemExit(1)

try:
    with open("/var/run/foo.lock", "w"):
        check_call("/path/to/binary")
finally:
    os.remove("/var/run/foo.lock")

更好的方法是使用filelock如果您可以安装第三方库):
from filelock import FileLock

with FileLock("/path/to/binary"):
    check_call("/path/to/binary")

您可以使用pip轻松安装filelock

$ pip install filelock

相关链接:在Python中锁定文件

注意:还有一个名字非常相似的包叫做lockfile!(不要混淆两者!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接