Share the list of lists in multiprocessing(在多处理中共享列表列表)
本文介绍了在多处理中共享列表列表的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我想提高代码的效率。我的代码的一个重要部分是将元素追加到列表列表中。基本上,我想做一些事情,
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
我认为原因与多处理的工作方式有关;它需要复制原始列表、做人员并返回它。在我的例子中,这应该是多处理非常慢的主要原因。
我的问题是:
1-在进程之间共享z_reg时,我应该如何执行与z_reg相同的功能?
2-它是否提高了性能。
3-还有其他想法如何将某些内容附加到z_reg中的每个子列表吗?
推荐答案
我建议您使用multiprocessing.Queue。将列表保存在主进程中,并通过队列发送来自所有子进程的数据。
这篇关于在多处理中共享列表列表的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
编程基础网
本文标题为:在多处理中共享列表列表
基础教程推荐
猜你喜欢
- 与常规 dict 相比,Python manager.dict() 非常慢 2022-01-01
- 用 Python 编写 Fortran 无格式文件 2022-01-01
- pyserial - 可以从线程 a 写入串行端口,是否阻塞从线程 b 读取? 2022-01-01
- 尝试制作WhatsApp机器人 2022-01-01
- 使用生成器和迭代器时 Python 多循环失败 2022-01-01
- 由Python将MP3转换为MIDI(类型错误:无法加载插件:mtg-Melodia:Melodia) 2022-01-01
- 将 x 轴刻度更改为自定义字符串 2022-01-01
- numpy float:比算术运算中内置的慢 10 倍? 2022-01-01
- 在 Celery 工作人员中捕获 Heroku SIGTERM 以优雅地关 2022-01-01
- Discord.py 缺少必需的参数 2022-01-01
