【发布时间】:2021-11-02 13:46:04
【问题描述】:
我有一些代码应该获取大量数据(存储在名为stabiliser_states 的变量中)并对大小为set_size 的每个子集进行一些分析。由于子集的数量可能会变得非常大,因此我一直在尝试使用多处理模块来并行化代码。但是,对于我真正感兴趣的数据,运行代码最终会导致 MemoryError。
这是已并行化的部分代码。函数check_lin_dep 进行数据分析,似乎工作正常。
import multiprocessing as mp
from itertools import combinations
...
pool = mp.Pool()
lin_dep_iter = pool.starmap(
check_lin_dep,
((comb[1], n, set_size, comb[0]) for comb in \
enumerate(combinations(stabiliser_states, set_size))),
chunksize=1000
)
pool.close()
对于导致 MemoryError 的数据,stabiliser_states 的长度约为 37000,因此对于 set_size = 2,大约有 7 亿个组合。我的理解是星图应该使用可迭代而不是列表,但我认为该错误可能表明程序正在尝试将组合(或另一个巨大的列表)存储在内存中的某个地方?
【问题讨论】:
标签: python multiprocessing python-multiprocessing