2017-03-07 5 views
1

私は、multiprocessing.Manager()とその共有オブジェクトの作成方法を認識しています。特に、作業者間で共有できるキュー。 question、これはquestion、これはquestionです。Pythonマルチプロセッシング:RuntimeError: "キューオブジェクトは継承を介してプロセス間でのみ共有する必要があります"

ただし、これらのリンクには、プロセス間で継承を継承する理由が記載されていません。私が理解するように、この場合でもキューはコピーすることしかできません。 Pythonで

+2

あなたは「相続」の間違った意味を考えていますか?彼らは 'クラスの子(親)' OOPの継承ではなく、それらを生成するプロセスからキューを継承するプロセスについて話しています。 – user2357112

答えて

1

Queue実装は、リードを保護し、このpipeに書き込むために別の、いくつかsemaphores 1つのプロセスからデータを送信するシステムpipeに依存しています。

pipeは、処理中にオープンファイルとして処理され、OSの制約のために、生成時にサブプロセスとしか共有できません。
semaphoresも、少なくともUNIXベースのシステムでは、初期バージョンのPythonの場合にのみ、産卵時にのみ共有されるファイルとして扱われます。

これらの2つのサブオブジェクトは一般に共有できないため、Queueは、開始後に漬けてサブプロセスに送信できません。

しかし、一部のOSや最近のバージョンのPythonでは、Connectionを共有し、共有可能なSemaphoreを作成することは可能です。したがって、理論上、プロセス間で共有できる独自のQueueを作成することができます。しかし、それは多くのハックを含み、非常に安全ではない可能性があります。

関連する問題