免费网站软件推荐,英文网站建设的问题,深圳网站建设找哪家,品牌建设网站特点python 中给文件加锁——fcntl模块import fcntl打开一个文件f open(./test) ##当前目录下test文件要先存在#xff0c;如果不存在会报错。对该文件加密#xff1a;fcntl.flock(f,fcntl.LOCK_EX)这样就对文件test加锁了#xff0c;如果有其他进程对test文件加锁#xff0c;…python 中给文件加锁——fcntl模块import fcntl打开一个文件f open(./test) ##当前目录下test文件要先存在如果不存在会报错。对该文件加密fcntl.flock(f,fcntl.LOCK_EX)这样就对文件test加锁了如果有其他进程对test文件加锁则不能成功会被阻塞但不会退出程序。解锁fcntl.flock(f,fcntl.LOCK_UN)fcntl模块flock() : flock(f, operation)operation : 包括fcntl.LOCK_UN 解锁fcntl.LOCK_EX 排他锁fcntl.LOCK_SH 共享锁fcntl.LOCK_NB 非阻塞锁LOCK_SH 共享锁:所有进程没有写访问权限即使是加锁进程也没有。所有进程有读访问权限。LOCK_EX 排他锁:除加锁进程外其他进程没有对已加锁文件读写访问权限。LOCK_NB 非阻塞锁:如果指定此参数函数不能获得文件锁就立即返回否则函数会等待获得文件锁。LOCK_NB可以同LOCK_SH或LOCK_NB进行按位或(|)运算操作。 fcnt.flock(f,fcntl.LOCK_EX|fcntl.LOCK_NB)下面是一个简单的例子#!/usr/bin/python#coding:utf8import osimport sysimport timeimport fcntl #导入模块class FLOCK(ojbect):def __init__(self,name)::param name: 文件名self.fobj open(name,w)self.fd self.fobj.fileno()def lock(self)try:fcntl.lockf(sefl.fd,fcntl.LOCK_EX|fcntl.LOCK_NB) #给文件加锁使用了fcntl.LOCK_NBprint 给文件加锁稍等 ... ...time.sleep(20)return Trueexcept:print 文件加锁无法执行请稍后运行。retrun Falsedef unlock(self):self.fobj.close()print 已解锁if __name__ __main__:print sys.argv[1]locker FLOCK(sys.argv[1])a locker.lock()if a:print 文件已加锁else:print 无法执行程序已锁定请稍等执行结果# python suo.py testtestfile lock please waiting..... (在等待期间在另一个终端运行此程序会有下面的结果)文件已加锁# python suo.py testtestfile no lock please check file...无法执行程序已锁定请稍等##程序中使用了fcntl.LOCK_NB 所以程序会直接退出没有等待。