与 Python 并行运行子进程

Posted

技术标签:

【中文标题】与 Python 并行运行子进程【英文标题】:running subprocesses in parallel with Python 【发布时间】:2020-06-16 08:09:38 【问题描述】:

我试图了解如何为多个子进程构建并行计算管道。 正如我所看到的,每个子进程块都等待前一个代码块运行,而我有一个管道,它对前一个运行没有依赖关系,它可以并行处理。我想了解这是否可能,如果是这样,显示如何做到这一点的示例语法将是一个很大的帮助!提前致谢。

import sys
import os
import subprocess


subprocess.run("python pipelinecode1.py".split() +
               [run_date, this_wk, last_wk, prev_wk], shell=True)

subprocess.run("python pipelinecode2.py".split() +
               [run_date, this_wk, last_wk, prev_wk], shell=True)

subprocess.run("python pipelinecode3.py".split() +
               [run_date, this_wk, last_wk, prev_wk], shell=True)

【问题讨论】:

【参考方案1】:

MCVE 原样显示对 python 解释器的零依赖,因此运行一组相互独立的任务最有效的步骤(不是一个管道,其中一个步骤接另一个 处理步骤的顺序"forms" "pipeline" ) 是 GNU parallel:

$ parallel python  run_date this_wk last_wk prev_wk ::: pipelinecode1.py \
                                                          pipelinecode2.py  \
                                                          pipelinecode3.py

这样您就不会浪费 CPU / 缓存资源,并摆脱阻塞和 GIL 锁重新引入的代码执行的 re-[SERIAL]-isation,而无需任何附加开销成本。

对于所有可用的配置,请阅读man parallel中的相应详细信息

【讨论】:

我不熟悉你建议的语法,我应该在 cmd 上运行它吗?我正在使用 Atom 作为编辑器。 @CagdasKanar 是的,这是标准的 GNU 包,安装它,如果到目前为止还没有安装,请阅读手册页并随意配置任何其他可用的技巧来从终端运行它并享受它的权力

以上是关于与 Python 并行运行子进程的主要内容,如果未能解决你的问题,请参考以下文章

Shell脚本入门 07:进程与信号

Linux学习-进程管理

golang 热重启

与 Python 并行运行子进程

关于wait 和 exit

python并发编程之多进程(理论)