Python从多个进程锁定和解锁文件

Python从多个进程锁定和解锁文件,python,python-3.x,Python,Python 3.x,我有一个被其他Python文件访问的文件xxx.txt。当script_1即将写入xxx.txt时,它应该锁定文件,并且script_2应该等待文件被script_1释放 我尝试使用此代码,但它不会锁定文件脚本_2能够写入文件 import fcntl, os, signal, time os.fork() class TimeoutException(Exception): pass def signal_handler(signum, frame): raise Timeou

我有一个被其他Python文件访问的文件
xxx.txt
。当
script_1
即将写入
xxx.txt
时,它应该锁定文件,并且
script_2
应该等待文件被
script_1
释放

我尝试使用此代码,但它不会锁定文件<代码>脚本_2能够写入文件

import fcntl, os, signal, time


os.fork()

class TimeoutException(Exception): pass

def signal_handler(signum, frame):
    raise TimeoutException()


f = os.open("xxx.txt", os.O_RDWR|os.O_CREAT)
fcntl.flock(f, fcntl.LOCK_EX)
time.sleep(20)
os.write(f, bytes("oook_0", "utf-8"))
fcntl.flock(f, fcntl.LOCK_UN)
os.close(f)
  • 首先,锁定文件是特定于平台的操作,因此您需要为不同的操作系统运行不同的代码
  • 其次,正如@Kevin所说,“在操作系统级别协调对单个文件的访问充满了各种各样的问题,您可能不想解决这些问题。最好的办法是使用一个单独的进程来协调对该文件的读/写访问。”
  • 解决

    from filelock import FileLock
    
    with FileLock("lock"):
        with open('lock', mode='w') as file:
            file.write('oook_1')