gpt4 book ai didi

python - 为什么当我使用多处理时它会花费更多时间?

转载 作者:太空宇宙 更新时间:2023-11-04 04:34:55 25 4
gpt4 key购买 nike

我在没有多处理的情况下使用的代码如下,它花费的时间是 0:00:03.044280:

def execute_it():

number = 10000000
listing_1 = range(number)
listing_2 = range(number)
listing_3 = range(number)
start = datetime.now()
task(listing_1, listing_2, listing_3)
print datetime.now() - start

def task(listing_1, listing_2, listing_3):

for l1, l2, l3 in zip(listing_1, listing_2, listing_3):
l1 + l2 + l3

我想使用 multiprocessing 来减少时间,我尝试的代码如下:

def execute_it():


number = 10000000
listing_1 = list(range(number))
listing_2 = list(range(number))
listing_3 = list(range(number))

params = zip(listing_1, listing_2, listing_3)


start = datetime.now()
pool = mp.Pool(processes=5)
pool.map(task, params)
pool.close()
print datetime.now() - start

def task(params):

params[0] + params[1] + params[2]

它花费了 0:00:15.654919 !!!

我的代码有什么问题?我确信他们做的事情是一样的。

最佳答案

多处理版本需要更长的时间,因为它实际上与单进程版本相同,加上一些额外的东西,如创建进程和运行映射。

可以将zip替换为itertools.izip,将mp.map替换为mp.imap,以获得预期的并行效果,否则所有繁重的处理将在主进程中进行。

from itertools import izip
...

def execute_it():
number = 10000000
listing_1 = list(range(number))
listing_2 = list(range(number))
listing_3 = list(range(number))

params = izip(listing_1, listing_2, listing_3)

start = datetime.now()
pool = mp.Pool(processes=5)
pool.imap(task, params)
pool.close()
print datetime.now() - start

关于python - 为什么当我使用多处理时它会花费更多时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51940423/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com