gpt4 book ai didi

python - 如果同时读取和追加同一个文件(python 编程),会发生什么情况?

转载 作者:太空宇宙 更新时间:2023-11-03 11:57:16 26 4
gpt4 key购买 nike

我正在使用两个单独的线程编写脚本,一个执行文件读取操作,另一个执行追加操作,两个线程都运行得相当频繁。

我的问题是,如果一个线程恰好在读取文件,而另一个线程正在将诸如“This is a test”之类的字符串附加到该文件中,会发生什么情况?

我知道如果你追加一个smaller-than-buffer 字符串,无论你在其他线程中读取文件的频率如何,都不会出现不完整的行,例如“This i”出现在您读取的文件,我的意思是操作系统会执行以下操作:附加“这是一个测试”->从文件中读取信息;或者:从文件中读取信息 -> 将“This is a test”附加到文件中;这种情况永远不会发生:追加“This i”-> 从文件中读取信息-> 追加“s a test”。

但是如果“This is a test”足够大(假设它是一个比缓冲区大的字符串),操作系统无法在一次操作中执行追加作业,因此追加作业会分为两种:先追加“This i”到文件,再追加“s a test”,那么在这种情况下,如果我恰好在整个追加操作的中间读取文件,我会得到这样的结果:追加“This i”-> 从文件中读取信息-> 追加“s a test”,这意味着我可能会读取一个包含不完整字符串的文件?

最佳答案

如果您担心这一点,只需让您的消费者寻找一个特殊字符(结束行就可以),这样它就知道没有不完整的写入。因此,您的生产者(将数据写入文件的人)可以输出部分数据,但消费者(从文件中读取的人)将知道它只获得了部分写入。

您有没有使用 PIPE 而不是文件的原因?您使用线程是否有原因?除了编码简单之外,您实际上并没有获得任何好处,但在 IMO 中,您也可以拥有单独的流程,然后您可以从该模型中获益。

补充:不幸的是,这个 I/O 的东西不仅仅是 Python 如何处理事情,而是操作系统如何处理事情。您所说的关于缓冲区的一切都是真实的。

http://docs.python.org/library/functions.html#open

我会尝试弄清楚您的缓冲区大小是多少,为此我什至不知道如何检查。无论如何我都在使用 OSX。

关于python - 如果同时读取和追加同一个文件(python 编程),会发生什么情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4646393/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com