python-3.x - 将多进程程序的输出通过管道传输到多个文本文件中
问题描述
我编写了一个使用 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
模块可以轻松捕获您的输出。您可以为每个脚本定义一个单独的输出文件,其文件名基于脚本名称:
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)
推荐阅读
- devise - 将 .includes 与 Devise gem 和 users_controller 一起使用
- r - 计数的累积分布函数作为数据子集的比率
- mysql - 使用@variable 计算相关性
- typescript - 尝试在 TS 中使用 TensorFlow,得到 Error:(1, 21) TS2307: Cannot find module '@tensorlowjs/tfjs' 或其对应的类型声明
- docker - 在 Docker 中的 Docker 上运行 webserver
- python-3.x - 是否有与项目交互的 API?
- excel - Excel 在团队中使用电子表格打开、修改、保存
- kivy - Spotipy 的 Android 权限和 Buildozer 要求
- google-bigquery - 如何在 BigQuery 中执行 switch 语句而不会出现聚合错误?
- javascript - Three.js - GLTF 模型位置不从原点开始