如果同时读取和追加相同的文件(python编程)会发生什么?
我正在编写一个脚本,使用两个单独的线程1执行文件读取操作,另一个执行追加,两个线程运行相当频繁.
我的问题是,如果一个线程正在读取文件,而另一个线程正好在这个文件中追加诸如“这是一个测试”之类的字符串,那么会发生什么? 我知道如果你附加一个小于缓冲区的字符串,无论你在其他线程中读取文件的频率如何,都不会有不完整的行,例如“This i”出现在你的读取文件中,我的意思是os要么do:追加“这是一个测试” – >从文件中读取信息;或:从文件中读取信息 – >在文件中追加“这是一个测试”;并且这种情况永远不会发生:附加“This i” – >从文件中读取信息 – >附加“测试”. 但是如果“这是一个测试”足够大(假设它是一个比缓冲区更大的字符串),那么os不能在一个操作中附加作业,所以附加的作业将分为两个:首先附加“This i “到文件,然后附加”sa test“,所以在这种情况下如果我碰巧在整个追加操作的中间读取文件,我会得到这样的结果:追加”This i“ – >从文件中读取信息 – >附加“s a test”,这意味着我可能会读取包含不完整字符串的文件? 解决方法
如果您对此感到担心,请让您的消费者寻找一个特殊字符(终结符可行),以便它知道没有不完整的写入.因此,您的生产者(向文件写入数据的人)可以输出部分数据,但消费者(从文件中读取一个)将知道它只有部分写入.
你有没有使用PIPE而不是文件的原因?你有使用线程的原因吗?你可能没有真正获得任何东西,除了编码的简单性,但IMO你可能也有不同的过程,然后你可以从这个模型中获得收益. 补充:不幸的是,这个I / O的东西不仅仅是Python如何处理事物,而是操作系统如何处理事情.你所说的关于缓冲区的一切都是正确的. http://docs.python.org/library/functions.html#open 我会试着找出你的缓冲区大小是什么,为此我甚至不知道如何检查.我还是在使用OSX. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |