-2

我正在尝试使用 python 调用我的函数my_function()100 次。由于my_function需要一段时间才能运行,我想并行化这个过程。

我尝试阅读https://docs.python.org/3/library/multiprocessing.html的文档,但找不到一个简单的示例来开始启动 100 名工作人员。顺序无关紧要;我只需要该功能运行 100 次。

任何建议/代码提示?

4

1 回答 1

4

您链接到的页面上的第一个示例有效。所以我只是将它复制并粘贴到这里并更改两个值。

from multiprocessing import Pool

def f(x):
    return x*x

if __name__ == '__main__':
    with Pool(100) as p:
        print(p.map(f, range(100)))

编辑:你刚才说你正在使用谷歌 colab。我认为 google colab 为您提供了两个cpu 内核,而不是更多。(您可以通过运行检查!cat /proc/cpuinfo)。使用 2 个 cpu 内核,您一次只能执行两个计算。

因此,如果您的函数主要不是等待外部 IO(例如来自网络),那么这是没有意义的:您有 50 次执行竞争一个内核。现代多处理的神奇之处在于,这意味着突然间,一个函数会被中断,它的状态会保存到 RAM 中,然后另一个函数可能会运行一段时间,然后被中断,等等。

这整个状态交换当然是开销。并行运行与拥有内核一样多的实例会更快。阅读Pool上面使用的文档以获取更多信息。

于 2022-01-07T19:55:42.397 回答