2013-04-10 27 views
0

我有一个线程定期写入文件(writeThread),另一个线程(readThread)异步读取文件。 readThread可以使用不同的句柄访问文件,而不是弄乱任何东西?线程之间的Python共享文件访问

如果没有,Python是否有共享锁,可以由writeThread使用,但不会阻止readThread?我不喜欢简单的非共享锁,因为文件访问的顺序为毫秒,而writeThread写周期的顺序相同(周期取决于某些外部参数)。因此,即使writeThread可能释放锁,也可能会出现这种情况,它会立即重新获取并因此导致饥饿。

我能想到的解决方案是维护文件的多个副本,一个用于读取,另一个用于写入,并避免整个情况。但是,涉及的文件大小可能会变得很大,因此使此方法不可取。

有没有其他的选择,或者这是一个糟糕的设计?

感谢

回答

0

是的,你可以多次打开文件,并获得它的独立访问。每个文件对象都有自己的缓冲区和位置,例如,一个文件对象不会混淆另一个文件对象。它的工作原理与多程序访问非常相似,在读取/写入文件的相同区域时必须小心。例如,在写入对象刷新之前,读取器不会看到追加到文件末尾的写入。直到阅读器和写入器都冲洗为止,读者才会看到重写现有数据。写入不会是原子性的,所以如果你正在写记录,读者可能会看到部分记录。异步选择或轮询阅读器上的事件可能会很时髦......不确定这一点。

另一种方法是mmap,但我没有足够的知道这些问题。