2011-07-07 6 views
0

大きなC++ライブラリへのPythonインターフェイスクラスがありますが、これは私にとっては大量のデータを扱うものです。私は、労働者が信号を送信することによって正常に停止することができます。つまり、os.kill(pid,signal.SIGINT)です。 私はp = Process(target=worker.run())で作業員を動かすことができると思っていました。それはうまくいきました。しかし、任意の時間に、作業員に信号を送信することによって中断します。労働者のバック!いくつかの関数がエクスポートされています。これは、ワーカーが何をしているかについての情報を与えるはずですが(明らかにを呼び出した後)、これらの関数はすべて初期値です。どうして? (作者は実際に作業をしましたが、作成した出力ファイルで見ることができますが、そこに情報がありません。の作業中にを実行しています...)作業員のPythonマルチプロセッシングステータス

キューまたは作業者に特定の変数の状態が必要なだけであれば、オブジェクトは本当に「pickleable」ではなく、すべてをコピーしたくないので、マルチプロセッシングのManagerはオプションではないようです。 (私はこのpickleableコンセプトをしっかりと把握しているとは確信していません...)

ありがとうございました!

+0

aixの回答から分かるように、マルチプロセッシングとスレッド動作を混同しているようです。子プロセスは、何らかの方法で状態を親プロセスに戻す必要があります。あなたが返信したい状態が基本的なデータ型である場合、pickleabilityが行く限り心配する必要はあまりありません(http://docs.python.org/library/pickle.html) –

答えて

1

multiprocessingでは、ワーカーは別々のプロセスとして実行されます。各プロセスには、独自のアドレス(メモリ)領域があります。

これは、ワーカーが変数を変更した場合、変更がyou've taken steps to make it visible以外の場合、親には表示されないことを意味します。

+0

ええ、ありがとう、私私はそれを最後に理解したと思う。何らかの理由で、2つのプロセスに再び参加すると、結合されたアドレス空間からオブジェクトが魔法のように取得されると考えました。 ;-)実際には、何も本当に参加していないので、名前が「不幸な」という名前を見つけました。親は単に子の終わりを待つだけです。 – FrustratedProcessKiller

関連する問題