原子文件写入。

atomicwrites的Python项目详细描述


https://travis-ci.org/untitaker/python-atomicwrites.svg?branch=masterhttps://ci.appveyor.com/api/projects/status/vadc4le3c27to59x/branch/master?svg=true

原子文件写入。

fromatomicwritesimportatomic_writewithatomic_write('foo.txt',overwrite=True)asf:f.write('Hello world.')# "foo.txt" doesn't exist yet.# Now it does.

区别于其他类似库的特性(请参见Alternatives and Credit):

    < P>无竞争的断言,目标文件还不存在。这可能是 由overwrite参数控制。

  • Windows支持,尽管没有经过很好的测试。MSDN资源不是很丰富 明确哪些操作是原子的我的假设是基于a comment 作者是Doug Crook,他出现了 成为微软员工:

    FAQ: Is MoveFileEx atomic Frequently asked question: Is MoveFileEx atomic if the existing and new files are both on the same drive?

    The simple answer is “usually, but in some cases it will silently fall-back to a non-atomic method, so don’t count on it”.

    The implementation of MoveFileEx looks something like this: […]

    The problem is if the rename fails, you might end up with a CopyFile, which is definitely not atomic.

    If you really need atomic-or-nothing, you can try calling NtSetInformationFile, which is unsupported but is much more likely to be atomic.

  • >P>简单的高级API,它封装了非常灵活的基于类的API。

  • 跨平台的一致错误处理

工作原理

它使用与给定路径在同一目录中的临时文件这确保了 临时文件位于同一个文件系统上。

然后,临时文件将自动移动到目标位置:on posix将使用rename如果文件应该被覆盖,否则 linkunlink的组合。在windows上,它使用MoveFileEx到 stdlib的ctypes带有适当的标志。

注意,对于linkunlink,有一个时间窗口 可能在文件系统中的两个条目下可用: 临时文件,以及目标文件的名称。

还要注意,目标文件的权限可能会这样更改。在一些 可以在没有任何并发问题的情况下发出chmod,但是 因为情况并非总是这样,所以这个库并不是自己做的。

fsync

在posix上,fsync在临时文件被写入(到 刷新文件内容和元数据),并在文件 移动(刷新文件名)。

fsync不处理磁盘的内部缓冲区,但似乎没有 成为任何标准的posixapi。在os x上,fcntlF_FULLFSYNC而不是fsync因为这个原因。

在Windows上,_commit 已使用,但无法保证磁盘内部缓冲区。

替代品和信用

AtomicWrites直接受到以下库的启发(并共享 最小代码量):

原子写入的其他替代方案包括:

  • sashka/atomicfile。原来我 考虑过使用它,但当时它缺少很多特性 需要(Windows支持,覆盖参数,通过 子类化)。
  • Boltons library collection 提供了一个用于原子文件写入的类,它看起来与 overwrite参数。但它缺少windows支持。

许可证

根据麻省理工学院授权,请参见LICENSE

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
Hibernate:jpamodelgen生成java而不是类   java如何在第二次活动结束后显示广告?   javascript如何在linux或windows上将java导出到jar   java One ArrayList添加了2个不同的选项   AmazonWeb服务如何在java中使用AWS Textract检索pdf中存在的表   java为什么RecycleView中的水平项在单击时不起作用?   java计算如果存在映射   java在捕获的组上应用正则表达式   如何使用Java在MySQL的同一个表中插入来自不同类的值   java字符串中最常见的字母(大写和小写)   Spring SessionBean实例正在由java中的多个用户共享   使用Spring Boot将@WebInitParam中的值外部化   java一创建线程就开始执行(多线程)   java是安卓所需的系统权限。意图行动给你打电话?