を使用して多数のジョブをスケジュールするために ipython parallel を使用していload_balanced_view
ます。各ジョブはsubprocess.Popen
、コードを実行し、stdout と stderr を取得するために使用します。次に、それらをログ ファイルに保存します。
これは、私が実行しているコードの構造の例です。
import subprocess as sp
def make_inifile(c):
...
def run_exe(exe, inifile):
def_Popen_kwargs = {'stdout': sp.PIPE, 'stderr': sp.PIPE,
'universal_newlines': True}
pexe = sp.Popen([exe, inifile], **def_Popen_kwargs)
(stdout, stderr) = pexe.communicate()
with open('logfile.log', 'a') as f:
f.write(stdout)
f.write(stderr)
rc = Client()
lbv = rc.load_balanced_view()
rc[:].execute("import subprocess as sp", block=True)
exe = "/path/to/exe"
for c in cases:
inifile = make_inifile(c)
lbv.apply(exe, inifile)
lbv.wait()
複数のプロセッサを使用するので、最良の場合でも、ログ ファイルは混乱しているように見えます。解決策として、ファイルをロックして、一度に 1 つのプロセスだけが書き込みできるようにすることが考えられます。これは実現可能ですが、私には少しやり過ぎに見えます。
より良い解決策は、ファイル名にエンジン ID を使用して、各エンジンのログ ファイルを開くことです。このようなもの:"logfile_{}.log".format(id)
質問は: 内からエンジン ID を取得する方法はありますrun_exe
か?