我正在使用 ipython 并行来安排大量使用load_balanced_view
. 每个作业用于subprocess.Popen
运行代码并检索标准输出和标准错误。然后我想将它们保存到日志文件中。
这是我正在运行的代码结构的示例:
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
?