Python 为什么Pool.map()比普通map慢?

Python 为什么Pool.map()比普通map慢?,python,multiprocessing,Python,Multiprocessing,我正在试验multiprocessing.Pool功能,但遇到了一个奇怪的问题,即使用Pool.map比仅使用普通map功能慢得多 我已经看过了以前的答案。我发现的任何线索都会产生更多的问题 这是我的密码: import multiprocessing from multiprocessing import Pool import random import time def f(x): time.sleep(1) return x**3 if __name__ == '

我正在试验multiprocessing.Pool功能,但遇到了一个奇怪的问题,即使用Pool.map比仅使用普通map功能慢得多

我已经看过了以前的答案。我发现的任何线索都会产生更多的问题

这是我的密码:

import multiprocessing
from multiprocessing import Pool
import random
import time


def f(x):
    time.sleep(1)
    return x**3


if __name__ == '__main__':

    vector = [1, 2, 3, 4] 

    # Single Process
    start = time.time()
    sp = map(f, vector)
    print(f"Single Process time: {time.time() - start}s")
    print(f"Should equal ~4.00 s")

    print("")

    # Multiprocessing
    p = Pool(processes=4)
    start = time.time()
    with p:
        mp = p.map(f, vector)
    print(f"Multi-Process time: {time.time() - start}s")
    print(f"Should equal ~1.00 s")
以下是我得到的打印输出:

Single Process time: 7.152557373046875e-07s
Should equal ~4.00 s

Multi-Process time: 1.1352498531341553s
Should equal ~1.00 s
我最初在这里做了一些非常类似的事情: 我遇到了与原始海报相同的问题。因此,我尝试将循环缩短为四个,并添加一个time.sleep函数来检查执行情况。这不起作用


使用imap似乎可以大幅缩短多处理代码,但我的单核解决方案仍然需要不到1秒的时间,这似乎是不可能的,因为我在阵列中的每个元素上睡了整整1秒——至少需要4秒!。我还尝试更改池对象中的核心数。我正在运行一台双核macbook pro,有4个逻辑核。

啊,发布一分钟后就想出来了

对于任何好奇的人,您需要在列表函数中调用map对象,如下所示:

sp = map(f, vector)
list(sp)
我认为这是因为python懒散地计算map对象。

没错。python中的map函数返回一个iterable。