首页 > 解决方案 > 将多进程程序的输出通过管道传输到多个文本文件中

问题描述

我编写了一个使用 python 中的多处理器库的代码。它使用Pool.

import os
from multiprocessing import Pool

process1 = ('myfirstfile.py',
            'mysecondfile.py',
            'mythirdfile.py',
            'myfourthfile.py')

def run_process(processes):
    os.system('python {}'.format(processes))

pool = Pool(processes=4)
pool.map(run_process, process1)

虽然它执行正确,但后面的代码myfirstfile.py和其他代码会产生我想为每个.py文件单独存储的输出,因为它包含一些我不想在两个进程同时结束执行时混合的信息。此外,在终端上运行它并不会执行所有进程,它有时只运行一半,有时只运行一个。

将输出传输到单独的输出文件的正确方法是什么。

标签: python-3.xpython-multiprocessing

解决方案


subprocess模块可以轻松捕获您的输出。您可以为每个脚本定义一个单独的输出文件,其文件名基于脚本名称:

import subprocess
from multiprocessing import Pool
from pathlib import Path

scripts = ('myfirstfile.py',
           'mysecondfile.py',
           'mythirdfile.py',
           'myfourthfile.py')

def run_process(script):
    log_file = Path(script).stem + '.log'
    with open(log_file, 'w') as log_handle:
        subprocess.run(['python', script], check=True, text=True, stdout=log_handle, stderr=subprocess.STDOUT)

pool = Pool(processes=4)
pool.map(run_process, scripts)

推荐阅读