gpt4 book ai didi

python - 在多处理中共享列表列表

转载 作者:行者123 更新时间:2023-12-01 09:15:47 25 4
gpt4 key购买 nike

我想提高代码的效率。我的代码的一个重点部分是将元素附加到列表列表中。基本上,我想做如下事情,

import multiprocessing
import time
def update_val(L, i):
L.append(i**2)
return L

if __name__ == "__main__":
N = 1000000
x_reg = [list(range(10)) for i in range(N)]
y_reg = [list(range(10)) for i in range(N)]
z_reg = [list(range(10)) for i in range(N)]
"Regular Call"
start = time.time()
[x_reg[i].append(i**2) for i in range(N)]
stat_reg =time.time() - start

"Multiprocessing"
num_cores = multiprocessing.cpu_count() # equals 4 in my case
pool = multiprocessing.Pool(num_cores)
start = time.time()
y_reg = pool.starmap(update_val,[(y_reg[i],i) for i in range(N)])
pool.close()
pool.join()
stat_val =time.time() - start


print("Regular: %g "%(stat_reg))
print("Mult.: %g "%(stat_val))

输出为:

Regular: 0.387984 
Mult.: 2.54244

我认为原因与多处理的工作原理有关;它需要复印原始 list ,进行工作并返回。这应该是我的情况下多处理速度非常慢的主要原因。这是我的问题:1- 在进程之间共享时,我应该如何对 z_reg 执行相同的功能?2-它是否增强了性能。3-还有其他想法如何将某些内容附加到 z_reg 中的每个子列表吗?

最佳答案

我建议您使用multiprocessing.Queue 。将列表保留在主进程中,并通过队列发送所有子进程的数据。

关于python - 在多处理中共享列表列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51272280/

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