1

我有一个有 10 个函数的程序,我想利用并发来提高效率。我已经提取了函数之间的依赖关系,如下所示:

f1 <- f2,f3,f4,f5
f2 <- f6
f3 <- f7,f8,f9
f4 <- f10
f5 <- f10
f8 <- f10
f9 <- f10

我可以使用多处理库来实现这一点吗?

谁能给我一段代码从它开始?

我的问题与这个问题非常相似,但我想使用 Python 库中的构建来获得它。

依赖于 Python 的并行任务并发,如 GNU Make

谢谢,

4

1 回答 1

1

我不是 100% 确定您要的是什么,但任何此类任务都可以通过以下方式完成。给定您提供的依赖关系,可以使用拓扑排序构造依赖关系图。使用此信息,可以立即确定哪些节点没有依赖关系,即那些没有传入边的节点。这些节点都可以并行处理。一旦处理了一个节点,就可以将所有后代节点标记为已满足给定的依赖关系。一旦满足了节点的所有依赖关系,就可以运行该节点。

在您的情况下,运行节点意味着执行函数调用。因此,您可能希望存储函数调用的结果,而不是简单地标记已满足依赖关系。

顺便说一句,在没有看到功能的情况下,这实际上可能会或可能不会产生任何性能优势。一般来说,这种并行性太细了;与实际并行运行工作相比,更多时间用于执行并行协调。

- -编辑 - -

我写了一个小型 Scala 库,我相信它可以满足您的需求。不幸的是,在 CPython 中不可能有类似的优雅解决方案,因为它不支持正确的多线程。这仍然是可能的,但很笨拙;整个框架需要以主从方式编写。这也限制了并行性,因为 master 充当了处理新任务的瓶颈。

于 2013-09-18T19:40:26.123 回答