我试图用Python执行一些昂贵的科学计算。我已将数据集读入带有 18 元素的列表( data_list ),并且每个元素也是 1500000 int数字的列表。 现在,我想在列表中的每对数据之间进行一些计算( data_list )。由于每个过程需要很长时间,并且我有8个处理器可供使用,因此我尝试使用多处理中的池方法。
lapply()
然后,我按得分对结果列表进行排序,并将第一个附加到 data_list 。
def calc_func(args):
# do some calculation, and return result and score
# len(_res) == 1500000
return _res, score
count = len(data_list)
pairs = [(i, j, data_list[i], data_list[j]) for i in range(0, count - 1) for j in range(i + 1, count)]
chunk_size, extra = divmod(len(pairs), 4 * 8)
if extra:
chunk_size += 1
pool = Pool(8)
res = pool.imap(calc_func, pairs, chunksize=chunk_size)
pool.close()
pool.join()
之后,在 data_list 中进行简单追加之间的计算,并将计算结果中的第一个追加到 data_list ,按评分即可。此处理需要重复60次。
res.sort(key=lambda e: e[2], reverse=True)
data_list.append(res.pop(0))
一开始,代码工作正常。但是当loop = 40时,所有系统内存都已被使用,并且每个进程的状态都没有运行,而是在系统监视器中显示为休眠状态。我应该如何改进我的代码以更快地运行并使用更少的内存。
我的Python版本是2.7,我的操作系统是Centos 7,内存为16GB。