在我的計劃之一,我有以下方法:異步文件IO在多線程應用程序具有可變折射率
def set_part_content(self, part_no, block_no, data):
with open(self.file_path, "rwb+") as f:
f.seek(part_no * self.constant1 + block_no * self.constant2)
f.write(data)
我這樣做是這種方式,因爲以下內容:
- 我必須寫在不同的索引(之所以
f.seek
在這裏) - 並且此函數是線程安全的(感謝
with
語句)
我的問題是這個函數被稱爲大約10k到100k次,而且由於打開/關閉時間,顯然它確實非常慢(它代表了我最關鍵的一組功能的一半執行時間)。
由於f.seek
,我無法直接在__init__
函數中打開文件以便對其進行操作(如果2個線程同時使用該函數,則會導致這兩個函數之一的索引不正確,這是至關重要的)。
有沒有可以加速此功能的模塊/方式?
等待等待等待。什麼?自從''with'語句何時神奇地使代碼對多線程使用安全?你確定你不會混淆使用'with'來進入和退出一個受鎖定保護的代碼塊(例如'threading.Lock')嗎? PEP-343和'with'的文件都不支持你的說法,這也是我的消息。索賠的來源是什麼? – 0xC0000022L
不,「with」語句不能安全地使這個線程。但Python中的I/O文件是線程安全的。 – FunkySayu
嗯...它更多的是我使用的線程安全的事實:2線程永遠不會同時寫入文件的同一部分。 – FunkySayu