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

lin*_*lof 8 python race-condition

我有两个Python脚本,它们都需要定期(想想cronjobs)来调用外部程序.

如果同时调用此程序(我们无法控制),则会发生数据错误,因此我们需要一种方法来同步对此二进制文件的调用.

有没有办法做到这一点,最好只使用Python标准库?

Jam*_*lls 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")
Run Code Online (Sandbox Code Playgroud)

更好的方法是使用filelock(如果你可以安装第三方库):

from filelock import FileLock

with FileLock("/path/to/binary"):
    check_call("/path/to/binary")
Run Code Online (Sandbox Code Playgroud)

您可以使用pip 轻松安装文件:

$ pip install filelock
Run Code Online (Sandbox Code Playgroud)

另请参阅相关:使用Python锁定文件

注意:似乎还有一个名为lockfile的名称非常相似的包!(不要混淆两个!)