我在羣集上並行運行多次python腳本。他們現在都寫入相同的輸出文件。這似乎會導致線條有缺陷。當一個程序寫入文件並導致另一個程序等待寫入完成時,是否有辦法「鎖定」文件?或者我必須使用多個輸出文件並將它們統一起來?防止兩個python程序一次寫入同一文件
0
A
回答
2
你可以使用OS locking mechanism.如果你真的想這麼做(因爲你提到了一個集羣,我假設你在Unix系統上)。問題:
- 等待時間:一個進程正在寫入,其他正在等待它完成不工作。
- 傳輸時間:您的文件將位於您的主目錄中,物理上位於羣集的中央節點上。每臺計算機都必須通過網絡發送數據,這比寫入磁盤要慢。相關的,如果他們必須寫很多。 (這實際上取決於羣集的細節)。在本地硬盤上寫入通常會更快,然後在完成後將其發送到您的目錄。
- 容易出錯:實施的細節很古怪,可能需要一些經驗才能正確執行。
如果你真的只想要一個文件,我認爲你最好的選擇是建立一個偵聽器進程,並從每個節點發送消息到主。這個監聽器將有一個可以並行寫入的堆棧,所以你不必擔心進程在等待對方。您當然必須確保所有相關進程都處於活動狀態並且可以正常工作,並且您可以快速寫入數據,以便內存不會過快增長。
要實現此目標,您可以選擇標準庫中的JSON RPC,pyzmq(廣泛用於商業生產環境)或MPI(專爲高性能計算而設計)。
+0
你和你的解釋其他人聽起來邏輯給我。由於我沒有被迫做鎖定,我想我會使用第二個選項使用幾個輸出文件。但是,謝謝你向我展示了它是如何完成的! – aldorado
相關問題
- 1. PHP防止包括同一個文件兩次
- 2. 讀取/寫入同一文件的兩個進程Python
- 3. Android:多次寫入同一個文件
- 4. 如何從同一個python程序寫入兩個單獨的日誌文件?
- 5. python和另一個程序寫入相同的文件
- 6. 2 java進程 - 一次讀取和一次寫入同一個文件
- 7. 兩個進程打開同一個文件進行寫入
- 8. 第一個Python程序需要一點幫助寫入文件
- 9. 使用單個程序在c中寫入一個空文件,但同時運行它不止一次
- 10. 兩個log4j文件夾可以寫入同一個文件嗎?
- 11. Python,將文件寫入兩次
- 12. 一次寫入文件,一次寫入全文
- 13. 停止我的應用程序的兩個實例同時寫入同一個文件夾
- 14. 從同一個文件夾讀取/寫入兩個ASP.net應用程序
- 15. 如何防止程序加載兩次?
- 16. 在同一文本文件上寫入Java多個程序
- 17. File.Copy是否阻止另一個應用程序寫入文件?
- 18. 在Python中寫入同一行文件
- 19. 同時將一個值寫入兩個文本文件
- 20. 可能一次寫入多個PHP文件中的同一個文件?
- 21. 如何從兩個程序同時寫入單個xml文件?
- 22. 一次寫入多個文件
- 23. 如何只從一個線程寫入一次文件?
- 24. 防止兩次調用js文件
- 25. 如何防止打開文件兩次?
- 26. 多個RollingFileAppenders寫入同一個文件
- 27. 通過一次操作寫入兩個文件描述符
- 28. 防止程序在文件寫入期間存在
- 29. 從同一個文件(PHP)中寫入兩個會話
- 30. 兩個用戶同時寫入一個文件? (PHP/file_put_contents)
後面的選項是最容易實現的,並且應該導致最少的問題。您的程序也可以繼續,無需等待另一個人寫入。 – Mathias711
我寧願Mathias建議的第二種方法,如果你有興趣鎖定,那麼這可能會有所幫助http://stackoverflow.com/questions/4843359/python-lock-a-file –