3

我有一个需要运行的动态生成进程(带参数的命令行库)的列表。

我知道其中一些是相互依赖的。我已经有一些包含此信息的对象。例如,standalone_exec_item 包含 process_data.process_id 和dependent_on_process_ids(这是一个进程 ID 列表。)

目前我正在考虑使用多处理库来异步运行进程列表,如下所示:

from multiprocessing import Process
import subprocess

def execute_standalone_exec_items(standalone_exec_items):

        standalones = []

        def run_command(command):
            output = subprocess.check_output(shlex.split(command))
            return output

        for standalone_exec_item in standalone_exec_items:
            standalone_command = generate_command(standalone_exec_item.process_data)

            standalone = Process(
                target=run_command,
                args=(standalone_command,)
            )
            standalones.append(standalone)

        for standalone in standalones:
            standalone.start()

        while True:
            flag = True
            for standalone in standalones:
                if standalone.is_alive():
                    flag = False
            if flag:
                break

但是我想知道在运行依赖进程之前是否有更好的方法来等待异步进程运行。我可以使用回调吗?我听说过 Twisted 的 deferred,我可以用这个吗?

最佳做法是什么?

编辑:Popen 是非阻塞的并且我不需要使用多处理是否正确?还是我需要使用 fcntl()?

4

1 回答 1

0

我会使用一个消息队列,其中一些进程发布消息,被调用的进程将订阅这些消息。

于 2012-08-20T23:26:03.100 回答