2012-01-31 15 views
3

私の質問の要点は、親(この状況のデーモン)が殺されたときに、マルチプロセッシングキューがどうなるかです。親出口のPythonマルチプロセッシングキュー

私は子プロセスのためのジョブをキューに入れ、バックグラウンドで動作するデーモンがあります。管理者が殺されている場合、それはsomeQueueを使用しようとし、したがって、で述べたように、それを破損していないと仮定すると(

class manager(Daemon): 
    def run(self): 
     someQueue = MP.Queue() 

     someChild = MP.Process(target=someCode, args=(someArgs)) 
     someChild.start() 
     ... 

をドキュメント)、とにかくキュー内のデータを回復するには?

この子プロセスを終了する前に、someQueuesomeChildにクリーンアップするという2つの理論的解決策があります。また、マネージャが終了したときにキューの状態を復元できるようにキューをダンプすると、私の問題も解決します。しかし、どちらかを実装する前に、正しい方向に微調整するのが良いでしょう。

おかげで、

答えて

1

あなたが永続的な/信頼性の高いキューイングをしたいように聞こえます。私はmultiprocessing.Queueクラスがパイプで実装されていると信じています(popen()呼び出しと同じように)ので、データは比較的一時的なので、内容を取得するためにOSレベルのトリッキーを行う必要があります。あなたは、(あなたのOSとファイルシステムのサポートがロックされていると仮定して)ファイルシステムファイルを使って独自の永続キュークラスを作成し、キューの内容を保存することに目を向けるかもしれません。その後、キューを検査し、未処理のデータを回復するために必要なすべての分析ツールを提供できます。

+0

これがどのように質問に答えるかわかりません。マルチプロセッシングにはパイプとキューがありますので、パイプとキューの両方がこの状況で同様に動作すると想定します(どちらの場合も、MPのドキュメントで前述の破損したケースを避ける限り)。 –

+0

これらのキューのデータを取得するためにOSレベルのトリッキーがあると確信していましたが、そうしようとする方法については言及していませんか?私はpythonを使用しているので、なぜこれらの状況を助けることができるいくつかのモジュールがなければならないときは、永続的なキュークラスを書くのです。 –

+0

*(...) 'Queue()'は 'Pipe()'の上に構築されています。* - [Pythonマルチプロセッシング - パイプ対キュー](http://stackoverflow.com/q/8463008/95735) –

関連する問題