【发布时间】:2026-01-07 01:05:02
【问题描述】:
我有一个像这样工作的 python 程序:
初始化数据
调用外部软件计算数据结果(使用子进程),读回外部软件的输出
处理输出,准备返回步骤 1。
我想在集群环境 (slurm) 中并行化第 2 步,并使用多节点环境。
我试图找到最简单的方法,因为如果在批处理文件中分配给 python 程序,我认为 subprocess 不会自动使用多个节点。
我尝试使用 dask-jobqueue,但是这依赖于为每个工作人员创建一个批处理文件,这意味着我必须进行 10 次批处理文件调用并等待它们全部赶上代码以使用它们。
我想知道是否有人有任何建议,因为这似乎应该是一件容易的事。
编辑:我认为这比仅使用多处理更复杂。 This question 了解我想要完成的工作,我想知道解决这类问题的理想方案是什么
【问题讨论】:
-
有很多方法可以做到这一点。在最基本的层面上,有两种选择:1)让您的 Python 进程同时进行多个子进程调用,每个子进程都将问题的一部分作为单个任务进行攻击,以及 2)让 Python 对某个事物进行单个子进程调用然后分解任务,然后利用某种并行化来并行执行任务....
-
#1 可以通过多种方式完成:a) 在单个执行线程中进行多个非阻塞子进程调用,b) 多个线程各自进行子进程调用,或 c) 多个多处理块(低开销线程)进行子进程调用。 #2 包含几乎无限的可能性。也许您的集群环境提供了一种自然的方式来执行 #2。如果不是,我是老派,所以我可能会选择 b) vs c)。
-
您的问题似乎已经被问到了。看看这篇文章。 - 这篇文章似乎解决了我提到的所有三种可能性......
-
感谢您的回复。子进程是否利用集群上可用的多个节点?
标签: python subprocess cluster-computing slurm