咱们在写python应用的时候,当涉及到多个进程向同一个文件write(或者read)的状况,若是几个进程同时都对这个文件进行写操做,那么文件的内容就会变得很是混乱,这个时候文件锁就派上用场了。python
python中的文件锁,能够保证同时只有一个进程写文件,目前使用的是fcntl这个库,它实际上为 Unix上的ioctl,flock和fcntl 函数提供了一个接口。python经过调用fcntl.flock()函数对文件加锁。并发
fcntl这个模块是Python自带的,但Windows没有,能够手工下载fcntl.py文件,而后保存到python的Lib目录下。函数
例如:一个文件设置了排它锁,若是这个锁已经被某个进程获取了,那么其余进程请求获取这个锁的时候将会被阻塞。
若是想要在没有得到这个排他锁的状况下不阻塞那些进程,能够与 LOCK_NB 联合使用,那么系统就不会阻塞该进程。即: fcnt.flock(f,fcntl.LOCK_EX|fcntl.LOCK_NB)spa
import fcntl class Lock(object): def __init__(self, file_name): self.file_name = file_name self.handle = open(file_name, 'w+') def lock(self): fcntl.flock(self.handle, fcntl.LOCK_EX | fcntl.LOCK_NB) def unlock(self): fcntl.flock(self.handle, fcntl.LOCK_UN) def __del__(self): try: self.handle.close() except: pass