2011-03-24 31 views
1

我正在將多線程數據(包括讀取和寫入)寫入單個文本文件。 我需要能夠替換或刪除文件沒有替換實際的文件。如何在其他線程從中讀取文件時修改文件?

我不能簡單地將.read()轉換成一個字符串,然後.write()一個新文件具有相同的名稱,因爲其他線程仍在使用該文件。我不能.write()到不同的文件,因爲線程需要.read()從這個文件。

這可能嗎?

有什麼等價於file.replace()file.remove()file.delete()

+3

是否只有一個寫入線程(和多個讀取線程)?爲什麼它必須是一個文件(而不是內存中的對象)?難道你不能使用併發訪問更容易的數據庫嗎? – 2011-03-24 07:05:18

+0

我不太確定這將是線程安全的,但mmap似乎可能與您的興趣相關。一個問題是,如果.read(),你得到的字符串數據不再是必然的。 http://docs.python.org/release/3.2/library/mmap.html – 2011-03-24 07:06:42

回答

2

壞主意。使用另一個獨立負責寫入/讀入文件的線程。或者,如果文件不是很大,請將文件讀入內存。

1

確定這是可能的,但可能只在您以統一的方式讀取/寫入文件時纔有用。當我說制服時,你應該將文件視爲數據塊。比如說,每個4096字節是一個塊,你可以在每個塊上做你需要的。如果你不這樣做,那麼你將不得不跟蹤數據的偏移量,並且會讓你的程序難以管理。

之後,您可以使用文件I/O的隨機訪問功能。有像seek()這樣的函數移動到文件中的不同偏移量,並且tell()來告訴當前偏移量。然後,您可以從當前位置讀取或寫入。只要想起它就像你會記憶,因爲這基本上就是它的原因。

我不確定你在問什麼file.remove()file.replace()file.delete()功能的存在或它如何幫助你做什麼。它擊敗了目的。

也讀了更多關於Readers-writers problem找出如何可以同步這個。

相關問題