我有两个Python脚本,定期(类似于cronjobs)需要调用外部程序。如果同时调用该程序(我们无法控制),会导致数据错误,因此我们需要一种同步调用该二进制文件的方法。是否有一种方法可以做到这一点,最好仅使用Python标准库?
因此,如果不使用第三方库,例如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")
from filelock import FileLock
with FileLock("/path/to/binary"):
check_call("/path/to/binary")
$ pip install filelock
相关链接:在Python中锁定文件
注意:还有一个名字非常相似的包叫做lockfile!(不要混淆两者!)