複雑なシミュレーションのパラメーターの最適化を行っています。最適化アルゴリズムのパフォーマンスを向上させるために multiprocessing モジュールを使用しています。http://pymotw.com/2/multiprocessing/basics.htmlで学んだ multiprocessing の基本。複雑なシミュレーションは、最適化アルゴリズムから与えられたパラメーターに応じて、さまざまな時間 (約 1 ~ 5 分) 続きます。パラメータの選択が非常に悪い場合、シミュレーションは 30 分以上続く可能性があり、結果は役に立ちません。そこで、マルチプロセッシングにタイムアウトを組み込むことを考えていました。これにより、定義された時間以上続くすべてのシミュレーションが終了します。問題の抽象化されたバージョンは次のとおりです。
import numpy as np
import time
import multiprocessing
def worker(num):
time.sleep(np.random.random()*20)
def main():
pnum = 10
procs = []
for i in range(pnum):
p = multiprocessing.Process(target=worker, args=(i,), name = ('process_' + str(i+1)))
procs.append(p)
p.start()
print('starting', p.name)
for p in procs:
p.join(5)
print('stopping', p.name)
if __name__ == "__main__":
main()
行p.join(5)
は 5 秒のタイムアウトを定義します。forループfor p in procs:
のため、プログラムは最初のプロセスが終了するまで5秒間待機し、2番目のプロセスが終了するまで5秒間待機しますが、5秒以上続くすべてのプロセスをプログラムに終了させたいです。さらに、どのプロセスも 5 秒以上継続しない場合、プログラムはこの 5 秒間待機してはなりません。