2017-01-16 36 views

回答

1

如果您可以確保對象只在一個線程中處理,這不是問題。但是,如果你不能,建議使用深層複製。

如果將對象放入隊列中,隊列對象不會自動執行此操作。

見參考文獻

請記住,對象必須能夠被醃(Multiprocessing Basics

通常更加有用能夠通過參數產生一個過程來告訴它做什麼工作。與線程不同,要將參數傳遞給多處理進程,參數必須能夠使用pickle序列化。這個例子傳遞每個工人一個數字,所以輸出更有趣一些。

+0

當OP使用多處理時,這與此有關嗎? – thebjorn

+0

你是什麼意思?博客文章和書頁指的是深度複製的問題,不僅是多處理的共同點。 – ppasler

+1

對不起,我對第一個鏈接的多線程和處理的可互換使用感到困惑。 – thebjorn

2

put隊列中的操作不會創建對象的副本(或深度副本),因此您在哪裏創建深度副本或完全取決於您期望並希望實現的行爲。

如果您將對象放入隊列並將對象修改爲外部並且還希望將更改反映到隊列中的對象中,則不要創建深度複製。

否則,請創建一個深層副本,以便在外部進行的更改不會反映在隊列中的對象上。

SO上還有一篇相關文章:Python multiprocessing.Queue modifies objects。如果您檢查接受的答案,則建議在隊列中使用不可變對象(如果不是深度複製,則使用)。