マルチプロセッシング機能の設定でエラーを見つけるのを手伝ってくれるかもしれません。データ (float 型) を取得して平均を計算するワーカー関数を設定しました。次のコードを (join() を使用して) 使用すると、マルチプロセッシングは開始されず、各 for ループが次々と処理されます。正しい値が計算されます。
反対に、join() 関数を削除すると、並列処理が有効になりますが、エラーが発生し、計算されたデータのほとんどが同じになります。ワーカー プロセスは独自のリストと変数を使用していないようです。ヒントを教えてください。ありがとうございました。ステファン
for hostgroup in hostgroups:
jobs = []
#multiprocessing.log_to_stderr(logging.DEBUG)
p = multiprocessing.Process(target=worker, args=(hostgroup,hostsfile,mod_inputfile,outputdir,testmode,backup_dir,start_time,end_time,rrdname,unit,yesterday,now_epoch,rrd_interval,rrd_heartbeat,name))
jobs.append(p)
p.start()
p.join()
UPDATE、それはプールで動作していますが、まだ並列ではありません:
number_of_processes = len(hostgroups)
if __name__ == '__main__':
pool = multiprocessing.Pool(processes=number_of_processes)
for hostgroup in hostgroups:
result = pool.apply_async(worker, [hostgroup,hostsfile,mod_inputfile,outputdir,testmode,backup_dir,start_time,end_time,rrdname,unit,yesterday,now_epoch,rrd_interval,rrd_heartbeat,name])
print result.get(timeout=30)
更新、これは並行して動作するようですが、一部のプロセスのみが正しく終了します (常に異なります):
number_of_processes = len(hostgroups)
if __name__ == '__main__':
pool = multiprocessing.Pool()
results = []
for hostgroup in hostgroups:
results.append(pool.apply_async(worker,[hostgroup,hostsfile,mod_inputfile,outputdir,testmode,backup_dir,start_time,end_time,rrdname,unit,yesterday,now_epoch,rrd_interval,rrd_heartbeat,name]))
pool.close()
pool.join()