2017-09-23 16 views
0

在Python2,是安全的有多個線程使用的代碼,如從單一不變的磁盤文件閱讀:Python中的文件輸入是線程安全的嗎?

with open(pathname, 'rb') as f: 
    f.seek(file_position) 
    data = f.read(number_of_bytes) 

的進程沒有,或將有該文件寫入權限。

顯然,以這種方式讀取文件不是原子的。 Python2文檔沒有提到(我能找到)關於文件對象和線程的內容。下面是seek方法的文檔:

https://docs.python.org/2/library/stdtypes.html?highlight=seek#file-objects

這是我的系統的一個關鍵問題,所以如果能夠提供指針到文檔,這將是令人欣慰的。

謝謝。

回答

2

如果每個線程都執行您提供的代碼,它們將單獨打開文件,這是安全的。我不確定要提交什麼文件。這只是允許進程多次打開相同文件的結果。您可能不在POSIX系統上,但僅供參考,它將open file description描述爲由open()(以C語言包裝,但由Python包裝)創建的事物,其中包含文件偏移量以及與訪問文件相關的其他信息。

+0

謝謝。你的最後一句話很關鍵,因爲它說Python文件對象相互獨立,即使它們與磁盤上的文件存在多對一的關係。 –