我有两个Python脚本,它们都需要定期(想想cronjobs)来调用外部程序。
如果同时调用此程序(我们无法控制),则会发生数据错误,因此我们需要一种方法来同步对此二进制文件的调用。
有没有办法做到这一点,最好只使用Python标准库?
答案 0 :(得分: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 install filelock
注意:似乎还有一个名为lockfile的非常类似命名的包! (不要混淆两个!)