函数签名
fcntl.flock(f.fileno(), operation)
operation 的操作包括以下选项:
变量 |
名称 |
简介 |
fcntl.LOCK_EX |
排他锁 |
其他进程没有读写访问权限 |
fcntl.LOCK_SH |
共享锁 |
所有进程都没有写权限(包括加锁进程),都有读权限 |
fcntl.LOCK_NB |
非阻塞锁 |
函数不能获得文件锁就立即返回,否则,等待获得文件锁 |
fcntl.LOCK_UN |
解锁 |
对加锁文件进行解锁 |
LOCK_NB可以同LOCK_SH或LOCK_NB进行按位或(|)运算操作
代码示例
# -*- coding: utf-8 -*- import fcntl import time def lock(f): fcntl.flock(f, fcntl.LOCK_EX | fcntl.LOCK_NB) def un_lock(f): fcntl.flock(f, fcntl.LOCK_UN) from multiprocessing import Process def open_file(): f = open('test.txt', 'r') lock(f) # 加锁 print(f.read()) time.sleep(3) un_lock(f) f.close() Process(target=open_file).start() Process(target=open_file).start()
多进程情况下,如果一个进程给文件加锁了,另一个进程会报错,抛出异常