pythonマルチプロセスの例外がキャッチ

通常のPythonマルチプロセスでは、親プロセスが子プロセスに配布タスク、子プロセスの成功のための唯一の責任があり、親プロセスは気にしません。

しかし、本番環境では、これは明らかに不適切である。私は、キューでマークされた子プロセスの障害は、あなたが失敗したプロセスを再試行達成できるコールバックメソッドを介して取得することができ、子供の研究状況で見つかった、コード次のように:

インポートキュー
 のインポートランダム
 読み込み時間
 からマルチプロセッシングインポートプール

Q = Queue.Queue()
SUCCESS_COUNT = 0 

#実際の操作方法タスク
DEFの:long_time_task(TABLE_NAME)
    RD(1、10 = random.randint 
  #タスクがスロー失敗し、投げをタスク名は、コールバックメソッドであるキャプチャすることができる
IF RD%2 == 0: 昇給の例外(TABLE_NAME) グローバルQの 印刷' OK = S%'table_nameの) time.sleep( 1。 #ミッション成功回数 DEF 成功(SUC): グローバルSUCCESS_COUNT SUCCESS_COUNT。= SUCCESS_COUNTは1つの+ #キャプチャは、タスクを失敗したDEF ERR(エラー): q.put(エラー)IF __name__ == ' __main__ '   #はスレッドプールに初期化する4つのスロット P =プール(4 リスト [= ' table_ ' + STR(I)のために I における範囲(1、21である。)] lists_num = LEN(リスト)  キュー位タスク I リスト: q.put(I)


  #キューが動作中のタスクがあってもよい、必ずしもすべてのタスクが完了していない空で、ループを終了するために、2つの条件を満足する必要がある
一方で ない q.empty()または SUCCESS_COUNT =!Lists_num: IF q.empty(): time.sleep( 1。 それ以外 p.apply_async(long_time_task、引数 =(q.get()、)、コールバック=成功、error_callback = ERR) p.close() p.join() 印刷" q.size = Dの%D%= SUCCESS_COUNT '%(q.qsize()、SUCCESS_COUNT))

 

おすすめ

転載: www.cnblogs.com/wangbin2188/p/12627365.html