Multiprocessing of for nested loops(FOR嵌套循环的多重处理)
问题描述
我正在尝试执行以下代码,以将列表DATA_SET_N保存在末尾。
问题是需要50多个小时,第一个I_1需要4.5个小时。
为了获得更快的data_set_N
,我想使用多处理。我们的想法是使用如下内容:
此处的问题是paramlist
导致MemoryError
(因为其大小为12x15^6x10)。
有没有办法使用多处理来更快地(大约10小时)执行代码,同时避免内存问题?
推荐答案
我会做的是:
- 使用多进程池。
- 保持基本代码不变,但有7个嵌套循环(7个内部循环),并且每个提交的任务都在处理
i_1
列表中的一个值。 - 在计算
value
之后立即移动廉价的'//' in value
检查,并可能避免执行不必要的正则表达式替换和调用eval
函数。
i_1
列表的长度),如果您的计算机有这些核心的话。如果您的计算机有12个核和它们都是物理核而没有其他核在运行,我预计执行时间将减少12倍。如果您有6个物理核和6个逻辑核,并且其他进程正在运行,那么执行时间显然不会减少12倍(我无法预测减少多少)。但这是解决您的记忆问题的最简单方法。
如果您有比12个内核多得多的内核,那么您可以定义process_value
拥有6个最内部的循环,并使用方法starmap
(iterable
的每个元素将是一个元组,process_value
现在除了托管列表外还有两个参数,i_1
和i_2
),可迭代参数是i_1
列表和i_2
列表的乘积。
这篇关于FOR嵌套循环的多重处理的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!