擅长:python、mysql、java
<p>一般来说,如果不深入研究多进程锁定,就很难保证这不会发生。然而,你通常可以减少很多问题。在</p>
<p>最常见的原因是在Python或libc中进行I/O缓冲。例如,它可以缓冲16k的输出,然后一次写入整个块。您可以通过在写入stdout之后刷新stdout来减少它,但这很尴尬。理论上,您应该能够将<code>-u</code>传递给Python以禁用stdout缓冲,但当我尝试时,这并不起作用。请参阅Sebastjan对<a href="https://stackoverflow.com/questions/107705">Disable output buffering</a>的回答,以获得更通用的解决方案(尽管可能有一种方法可以更直接地禁用输出缓冲)。在</p>
<p>第二个问题是底层的写入并不总是原子的。特别是,对管道的写操作在特定大小(PIPE_BUF,通常是512字节)以内是原子的;超过这个值就不能保证了。这只严格适用于管道(而不是文件),但同样的一般问题也适用:较小的写入更可能以原子方式发生。见<a href="http://www.opengroup.org/onlinepubs/000095399/functions/write.html" rel="nofollow noreferrer">http://www.opengroup.org/onlinepubs/000095399/functions/write.html</a>。在</p>