12

multiprocessingPython のモジュールの使用に関して、基本的な質問がいくつかあります。

class Someparallelworkerclass(object) :

    def __init__(self):
       self.num_workers = 4
       self.work_queue = multiprocessing.JoinableQueue()
       self.result_queue = multiprocessing.JoinableQueue()

    def someparallellazymethod(self):
       p = multiprocessing.Process(target=self.worktobedone).start()

    def worktobedone(self):
      # get data from work_queue
      # put back result in result queue

渡す必要がありwork_queueますresult_queueか?答えはOSに依存しますか?より基本的な質問は、子プロセスは親プロセスからコピーされた (COW) アドレス空間を取得するので、クラス/クラス メソッドの定義を知っているかどうかです。はいの場合、キューが IPC 用に共有されること、および子プロセスでandの複製を作成してはならないことをどのように認識しますか? これをオンラインで検索してみましたが、見つかったドキュメントのほとんどはあいまいで、実際に何が起こっているのかについて十分に詳しく説明していませんでした。 argsProcesswork_queueresult_queue

4

3 に答える 3

-1

子プロセスは、コピーされたアドレス空間を取得しません。子は、何も共有されていない完全に独立した python プロセスです。はい、キューを子に渡す必要があります。これを行うと、マルチプロセッシングは IPC を介して自動的に共有を処理します。https://docs.python.org/2/library/multiprocessing.html#exchange-objects-between-processesを参照してください。

于 2014-10-06T22:26:51.940 に答える