当前位置: 首页 > 知识库问答 >
问题:

与Python并行运行子进程

师建德
2023-03-14

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

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个答案

梁兴文
2023-03-14

MCVE原样显示对python-interpreter的依赖性为零,因此运行一组相互独立的任务(而不是流水线,在流水线中一步接一步的处理步骤“形成”了“流水线”)的最有效步骤是GNUParallel:

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

这样,您就不会浪费CPU/缓存资源,也不会逃避代码执行的阻塞和GIL-lock重新引入的重新[SERIAL]-isation而没有任何额外的开销成本。

有关所有可用的配置,请参阅man Parallel中的相应详细信息

 类似资料:
  • 问题内容: 我正在远程服务器上运行几个命令,并分别收集其输出以进行进一步处理: 但是,这会导致顺序执行subprocess(’ssh … cat …’)命令。第二高峰等待第一个完成,依此类推。 如何修改此代码,以使子流程调用并行运行,同时仍能够分别收集每个输出? 问题答案: 另一种方法(而不是将shell进程放在后台的其他建议)是使用多线程。 您所拥有的方法将执行以下操作: 要收集结果,您可以执行

  • 问题内容: 我想同时运行许多进程并能够随时输出stdout。我该怎么办?我需要为每个调用运行线程吗? 问题答案: 您可以在一个线程中完成。 假设您有一个脚本可以随机打印行: 而且您想在输出可用后立即收集它,您可以按照@zigg的建议在POSIX系统上 使用: 更具可移植性的解决方案(应在Windows,Linux,OSX上运行)可以为每个进程使用读取器线程,请参阅python中的对子进程的非阻塞读

  • 问题内容: 我需要运行一个程序并将其输出收集到stdout。这个程序(socat)需要在python脚本期间在后台运行。Socat一旦运行,便处于dameon模式,但首先,它将向我的其余脚本输出一些行到stdout。 命令: 输出: … 我基本上想在程序开始时运行它,并保持运行直到脚本终止,但是我需要将两个/ dev / pts / X名称读入python。 谁能告诉我该怎么做? 我想出了这个挂起

  • 我正在尝试将bash脚本迁移到Python。 bash脚本并行运行多个OS命令,然后在继续之前等待它们完成,即: 命令 我希望使用Python子进程实现同样的目标。这可能吗?如何等待subprocess.call命令完成后再继续?

  • 问题内容: 我先研究了一下,却找不到答案。我试图在Python中并行运行多个函数。 我有这样的事情: 我想调用func1和func2并使它们同时运行。这些功能彼此之间或在同一对象上不相互作用。现在,我必须等待func1完成才能启动func2。我该如何执行以下操作: 我希望能够几乎同时创建两个目录,因为我每分钟都在统计要创建多少个文件。如果该目录不存在,将会拖延我的时间。 问题答案: 你可以使用th

  • 问题内容: 我编写了一个作为守护程序运行的小型Python应用程序。它利用线程和队列。 我正在寻找更改此应用程序的常规方法,以便可以在其运行时与其进行通信。通常,我希望能够监控其健康状况。 简而言之,我希望能够执行以下操作: 稍后,我希望能够进行以下操作: 明确地说,实现Django启发式语法没有任何问题。我不知道该怎么做是将信号发送到守护进程(启动),或者如何编写守护进程来处理和响应此类信号。