2014-06-26 78 views
0

我有一個長期運行的進程運行使用python的多處理模擬。最後,進程通過管道將結果發送回主進程。Python多處理破損管道,​​訪問命名空間

問題是,我已經重新定義了結果對象的類,所以我知道它會給我一個不可取的錯誤。爲了解決這個問題,我得到了管道的文件描述符,並試圖用os.fdopen打開它。不幸的是,我得到了一個「錯誤的文件描述符」錯誤,現在如果我嘗試從管道接收,我會得到相同的結果。

因爲這是一個非常長的模擬,我不想殺死這個過程並重新開始。有沒有辦法將對象從管道中取出,或者只是訪問子進程的名稱空間,以便將其保存到磁盤?

非常感謝。

+1

會更好,如果你發佈一些你的虛擬代碼片段 –

回答

0

multiprocessing工人轉移unpicklable原始數據發回了一些建議:

1)每個工人寫入到數據庫或文件(或者打印到控制檯)

2)轉換將原始數據一個字符串,返回父級。如果父母只是記錄事情,那麼這是最簡單的。

3)轉換爲JSON,返回父級。如果父母正在彙總數據,而不僅僅是記錄數據,則此解決方案最爲合適。

+0

我的主要問題是我無法檢索當前數據。將來,我可以簡單地將工作進程寫入文件,但我不想丟失當前停留在子進程中的數據(需要很長時間才能獲得)。 – sheridp

+0

你想修改正在運行的項目的代碼,以便當前的數據可用?這是不可能的。 – johntellsall