【发布时间】:2017-04-20 14:43:19
【问题描述】:
我有一个长时间运行的 python 程序在共享文件上“追加”写入(多进程):
out = open("shared_file", "a")
while has_input:
do_processing()
out.write("%s, %s, %s\n" % field1, field2, field3)
上面的伪代码运行 8 个进程,比如说。这将导致一小部分交错输出。这似乎与基于谷歌搜索的缓冲区相关。共享文件追加的正确方法是什么?
【问题讨论】:
-
尝试实现文件锁定系统。有一些软件包,例如
FileLock和 unix utilflock -
不需要外部包——Python标准库支持
flock()。 -
也就是说,您可能只是考虑为您的文件禁用缓冲。内核级语义通常会阻止任何单个
O_APPEND成为非原子,只要写入时间不长以至于需要将它们分成两个或多个调用。out = open("shared_file", "a", 0) -
备份,重新:“交错输出”——您关心的是单行包含来自两个不同进程的内容的情况,还是您的输出在多个进程之间交替的情况?
标签: python