首页 > 解决方案 > 使用 multiprocessing.Pool 进行多处理

问题描述

即使是使用 mutiprocessing.Tool 方法的最基本任务,我也遇到了问题。它似乎正在工作,但从未完成最简单的任务。你能帮我做错什么吗?我读了一些文章,试图理解它,但可以弄清楚。我添加了一个简短的示例(使用列表(地图(平方,范围(2_000_000))),它有效,但不是下面的。)提前致谢,

罗兰

"""
from multiprocessing import Pool
import time
process_pool = Pool(processes = 4)

def squared(n):
    return n ** 2
    
start = time.perf_counter()
process_pool.apply(squared, range(2_000_000))
end = time.perf_counter() - start
print(f"Run time: {end}")
"""

标签: python-3.xpython-multiprocessing

解决方案


我认为您想要imap()(并squared()在定义池之前移动):

from multiprocessing import Pool
import time


def squared(n):
    return n ** 2

process_pool = Pool(processes = 4)
    
start = time.perf_counter()
process_pool.imap(squared, range(2))
end = time.perf_counter() - start
print(f"Run time: {end}")

请记住,这不是一个非常具有代表性的示例,因为您不会对结果做任何事情;更好的事情是

with Pool(4) as pool:
    results = pool.imap(squared, range(2_000_000))

    for result in results:
        pass  # do something here with the result

推荐阅读