我正在努力想出如何并行处理一个有向无环图。当所有输入节点都被处理后,每个节点才能“执行”。假设有以下接口的类Task
:
class Task(object):
result = None
def inputs(self):
''' List all requirements of the task. '''
return ()
def run(self):
pass
我想不到一种方法来异步处理这个图形结构,同时使用最大数量的工作人员,除了一种方法。
我认为通过为每个任务创建线程,并等待所有输入被处理,可以实现最佳处理。但是,立即为每个任务生成线程而不是连续生成线程(即当任务准备好进行处理时)对我来说听起来不是一个好主意。
import threading
class Runner(threading.Thread):
def __init__(self, task):
super(Runner, self).__init__()
self.task = task
self.start()
def run(self):
threads = [Runner(r) for r in self.task.inputs()]
[t.join() for t in threads]
self.task.run()
有没有更理想的方法来模仿这种行为?此外,这种方法目前还没有实现限制同时运行任务数量的方式。