2013-04-10 70 views
0

我有一個線程定期寫入文件(writeThread),另一個線程(readThread)異步讀取文件。 readThread可以使用不同的句柄訪問文件,而不是弄亂任何東西?線程之間的Python共享文件訪問

如果沒有,Python是否有共享鎖,可以由writeThread使用,但不會阻止readThread?我不喜歡簡單的非共享鎖,因爲文件訪問的順序爲毫秒,而writeThread寫週期的順序相同(週期取決於某些外部參數)。因此,即使writeThread可能釋放鎖,也可能會出現這種情況,它會立即重新獲取並因此導致飢餓。

我能想到的解決方案是維護文件的多個副本,一個用於讀取,另一個用於寫入,並避免整個情況。但是,涉及的文件大小可能會變得很大,因此使此方法不可取。

有沒有其他的選擇,或者這是一個糟糕的設計?

感謝

回答

0

是的,你可以多次打開文件,並獲得它的獨立訪問。每個文件對象都有自己的緩衝區和位置,例如,一個文件對象不會混淆另一個文件對象。它的工作原理與多程序訪問非常相似,在讀取/寫入文件的相同區域時必須小心。例如,在寫入對象刷新之前,讀取器不會看到追加到文件末尾的寫入。直到閱讀器和寫入器都沖洗爲止,讀者纔會看到重寫現有數據。寫入不會是原子性的,所以如果你正在寫記錄,讀者可能會看到部分記錄。異步選擇或輪詢閱讀器上的事件可能會很時髦......不確定這一點。

另一種方法是mmap,但我沒有足夠的知道這些問題。