将多进程程序的输出通过管道传输到多个文本文件中
Piping the output of a multiprocess program into multiple text files
我编写了一个使用 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
文件单独存储的输出,因为它包含一些我不想混合的信息如果两个进程在它确实发生的同时结束执行。还有,运行它在终端上并不执行所有进程,有时只运行一半,有时只运行一个。
将输出通过管道传输到单独的输出文件的正确方法是什么。
subprocess
module 可以轻松捕获您的输出。您可以为每个脚本定义一个单独的输出文件,其文件名基于脚本名称:
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)
我编写了一个使用 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
文件单独存储的输出,因为它包含一些我不想混合的信息如果两个进程在它确实发生的同时结束执行。还有,运行它在终端上并不执行所有进程,有时只运行一半,有时只运行一个。
将输出通过管道传输到单独的输出文件的正确方法是什么。
subprocess
module 可以轻松捕获您的输出。您可以为每个脚本定义一个单独的输出文件,其文件名基于脚本名称:
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)