0

我正在使用 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

4

1 回答 1

2

在启动时使用 dview 将客户端 ID 推送到客户端还是使用os.getpid()

于 2013-11-13T14:49:59.013 回答