2017-01-16 4 views
2

Queueにオブジェクトを配置すると、オブジェクトのディープコピーを作成してキューに入れる必要がありますか?Pythonマルチプロセッシングキューはオブジェクトの置かれた場所に安全ですか?

+0

私はオブジェクトが受信プロセスに転送される前にピクルされていると考えています(つまり、同じコピーで作業していません)。 – thebjorn

+0

@マジドアンサーで回答を受け入れ、質問を閉じてください。 – ppasler

答えて

1

オブジェクトが1つのスレッドでのみ処理されるようにすることができれば、問題はありません。しかし、できない場合は、ディープコピーを使用することをお勧めします。

キューオブジェクトは、オブジェクトを入れると自動的にこれを行いません。

参照参考文献

オブジェクトがへのそれは通常より有用

Multiprocessing Basics)漬けすることができるようにする必要があることに留意してください引数を指定してプロセスを生成して、何をすべきかを伝えることができます。スレッド処理とは異なり、引数をマルチプロセッシングプロセスに渡すには、引数はpickleを使用してシリアル化できる必要があります。この例では各作業者に番号を渡して出力が少し面白くなります。

+0

OPがマルチプロセッシングを使用している場合、これは関連しますか? – thebjorn

+0

どういう意味ですか?ブログの記事と本のページでは、マルチプロセッサだけでなく、ディープコピーの問題も参照しています。 – ppasler

+1

申し訳ありませんが、私は最初のリンクの交換可能なマルチスレッドと処理の使用によって混乱しました。 – thebjorn

2

putキュー内での操作では、オブジェクトのコピー(またはディープコピー)は作成されません。ディープコピーを作成する場所、または実装したい動作に完全に依存しません。

オブジェクトをキューに入れてオブジェクトを外部に変更し、その変更をキュー内のオブジェクトに反映させたい場合は、ディープコピーを作成しないでください。

ディープコピーを作成して、外部で行った変更がキュー内のオブジェクトに反映されないようにします。

また、SO:Python multiprocessing.Queue modifies objectsに関する関連記事もあります。受け入れられた回答をチェックすると、キューに不変オブジェクトを使用することが示唆されます(、深くコピーしていない場合は)。

関連する問題