我有一个动态生成的进程列表(带参数的命令行库),我需要运行它。
我知道其中一些人彼此依赖。我已经有一些包含这些信息的对象。例如,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的推迟,我可以用吗?
最佳做法是什么?
编辑: Popen是非阻塞的并且我不需要使用多处理这是正确的吗?或者我需要使用fcntl()?
答案 0 :(得分:0)
我会使用一个消息队列,其中一些进程发布消息将被调用进程将订阅。