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

Python的Fork-join模型实现?(相当于Java的ForkJoinPool)

柳镜
2023-03-14

我正在寻找Python的fork-连接模型的实现。作为Java的ForkJoinPool,它应该允许将一个任务的工作递归地拆分(fork)为几个子任务。一旦子任务完成,结果就会被连接并返回。理想情况下,它应该支持类似于concurrent.futures中的ThreadPoolExector和ProcessPoolExector的线程和进程,但线程现在更重要。它必须允许限制线程的数量(我希望每个内核有一个线程)。我知道这只有在代码释放GIL时才会有用。

来自维基百科的示例,以阐明分叉连接模型:

solve(problem):
    if problem is small enough:
        solve problem directly (sequential algorithm)
    else:
        for part in subdivide(problem)
            fork subtask to solve(part)
        join all subtasks spawned in previous loop
        return combined results

Python中有这样的库吗?我找不到一个。

共有1个答案

赵修诚
2023-03-14

我想你想要的是收集结果,multiprocessing.starmap()可能是选择,这里是例子

import multiprocessing as mp

def func(x, y):
    return x + y

l = list()
with mp.Pool(mp.cpu_count()) as p:
    l = p.starmap(func, [(1,2), (2,3), (3,4)])

print(l)  # result in [3, 5, 7]
 类似资料:
  • 问题内容: 是否有Python类或模块实现类似于BitSet的结构? 问题答案: 标准库中没有任何内容。尝试: http://pypi.python.org/pypi/bitarray

  • 问题内容: 我是Python的长期用户,并且非常喜欢使用字典的方式。它们非常直观且易于使用。是否有与python字典等效的Java?我听说有人在使用哈希图和哈希表。有人可以解释使用哈希表和哈希图与python字典的异同吗? 问题答案: Python的类是Python文档非正式地称为“ 映射类型 ”的实现。在内部,使用哈希表实现。 Java的类是接口的实现。在内部,使用哈希表实现。 语法上有一些细微

  • 问题内容: 因此,我有两个要合并在一起的数据框。 我要合并3列,其中2列很容易。 我希望这是使用第三列,但这将是一个比较,如下所示: 不知道正确的语法在这里。 如果是SQL,对我来说将很容易。 有帮助吗? 问题答案: 熊猫只支持等联接。您需要添加第二步来过滤结果,如下所示:

  • fork-join框架允许在几个worker上中断某个任务,然后等待结果将它们组合起来。 它在很大程度上利用了多处理器机器的容量。 以下是fork-join框架中使用的核心概念和对象。 Fork Fork是一个过程,在这个过程中,任务将自身分成较小且独立的子任务,这些子任务可以同时执行。 语法 (Syntax) Sum left = new Sum(array, low, mid); left.

  • 本文向大家介绍Java Fork/Join框架,包括了Java Fork/Join框架的使用技巧和注意事项,需要的朋友参考一下 Fork/Join框架是ExecutorService接口的一个实现,通过它我们可以实现多进程。Fork/Join可以用来将一个大任务递归的拆分为多个小任务,目标是充分利用所有的资源尽可能增强应用的性能。 和任何ExecutorService接口的实现一样,Fork/Jo

  • 我阅读了Java 7中引入的Fork/Join框架的实现,我只是想检查一下我是否理解这种魔力是如何工作的。 据我所知,当一个线程分叉时,它会在其队列中创建子任务(其他线程可能会也可能不会窃取)。当线程尝试“加入”时,它实际上会检查其队列中的现有任务,然后递归地执行这些任务,这意味着对于任何“加入”操作,将向线程调用堆栈中添加2个帧(一个用于加入,另一个用于新执行的任务调用)。 据我所知,JVM不支