2014-04-17 76 views
0

我在羣集上並行運行多次python腳本。他們現在都寫入相同的輸出文件。這似乎會導致線條有缺陷。當一個程序寫入文件並導致另一個程序等待寫入完成時,是否有辦法「鎖定」文件?或者我必須使用多個輸出文件並將它們統一起來?防止兩個python程序一次寫入同一文件

+1

後面的選項是最容易實現的,並且應該導致最少的問題。您的程序也可以繼續,無需等待另一個人寫入。 – Mathias711

+1

我寧願Mathias建議的第二種方法,如果你有興趣鎖定,那麼這可能會有所幫助http://stackoverflow.com/questions/4843359/python-lock-a-file –

回答

2

你可以使用OS locking mechanism.如果你真的想這麼做(因爲你提到了一個集羣,我假設你在Unix系統上)。問題:

  • 等待時間:一個進程正在寫入,其他正在等待它完成不工作。
  • 傳輸時間:您的文件將位於您的主目錄中,物理上位於羣集的中央節點上。每臺計算機都必須通過網絡發送數據,這比寫入磁盤要慢。相關的,如果他們必須寫很多。 (這實際上取決於羣集的細節)。在本地硬盤上寫入通常會更快,然後在完成後將其發送到您的目錄。
  • 容易出錯:實施的細節很古怪,可能需要一些經驗才能正確執行。

如果你真的只想要一個文件,我認爲你最好的選擇是建立一個偵聽器進程,並從每個節點發送消息到主。這個監聽器將有一個可以並行寫入的堆棧,所以你不必擔心進程在等待對方。您當然必須確保所有相關進程都處於活動狀態並且可以正常工作,並且您可以快速寫入數據,以便內存不會過快增長。

要實現此目標,您可以選擇標準庫中的JSON RPC,pyzmq(廣泛用於商業生產環境)或MPI(專爲高性能計算而設計)。

+0

你和你的解釋其他人聽起來邏輯給我。由於我沒有被迫做鎖定,我想我會使用第二個選項使用幾個輸出文件。但是,謝謝你向我展示了它是如何完成的! – aldorado

相關問題