包装PortalLocker配方,方便使用
portalocker的Python项目详细描述
概述
PortalLocker是一个库,它提供了一个简单的文件锁定API
需要注意的一个重要细节是,在Linux和Unix系统上,锁是 默认咨询通过在mount命令中指定-o mand选项 可以在Linux上启用强制文件锁定。这通常不是 但建议有关此主题的详细信息:
该模块当前由rick van hattem<;Wolph@wol.ph>;维护。 项目位于https://github.com/WoLpH/portalocker。缺陷和特性 可以在那里提交请求补丁也很受欢迎。
提示
在某些网络文件系统上,可能需要在关闭文件之前强制执行一个os.fsync(),以便在另一个客户端读取文件之前实际写入该文件。实际上,这可以归结为:
with portalocker.Lock('some_file', 'rb+', timeout=60) as fh: # do what you need to do ... # flush and sync to filesystem fh.flush() os.fsync(fh.fileno())
链接
示例
要确保缓存生成脚本不会竞争,请使用锁类:
>>> import portalocker >>> with portalocker.Lock('somefile', timeout=1) as fh: print >>fh, 'writing some stuff to my cache...'
要自定义打开和锁定,也可以使用手动方法:
>>> import portalocker >>> file = open('somefile', 'r+') >>> portalocker.lock(file, portalocker.LOCK_EX) >>> file.seek(12) >>> file.write('foo') >>> file.close()
由于文件是自动解除锁定的,因此不需要明确解除锁定 在file.close()之后如果您仍然觉得需要手动解锁文件 你就不能这样做了:
>>> portalocker.unlock(file)
请注意,您的数据可能仍在缓冲区中,因此 只有在flush()或close()之后,数据才可用
更多的例子可以在 tests
变更日志
请参阅changelog页。
许可证
请参阅LICENSE文件