我做了一个简单的多处理代码,但我认为它不起作用。
当我在笔记本电脑上尝试此代码时,我通过活动监视器应用程序检查了处理器,它显示某些处理器可以正常工作。因此,使用此代码,我在工作站上运行它(Core 最多 28 个,使用 24 个(,并通过任务管理器再次检查它。但是,CPU 使用率并没有增加,只是处理器增加了。
# Multiprocessing
def multi(input_field):
result = subvolume.label(input_field)
return result
test_list = [resampled_sub_1, resampled_sub_2, resampled_sub_3,
resampled_sub_4, resampled_sub_5]
if __name__ == '__main__':
pool = multiprocessing.Pool(processes=24)
results = pool.map(multi, test_list)
pool.close()
pool.join()
当多处理正确完成时,我认为 CPU 使用率比这增加。我哪里做错了什么?
中有 24 个进程,但可迭代test_list
中只有 5 个项目。当你从我的回答中选择calc_chunksize_info()
时,你可以计算生成和分布的块:
calc_chunksize_info(n_workers=24, len_iterable=5)
# Out: Chunkinfo(n_workers=24, len_iterable=5, n_chunks=5, chunksize=1, last_chunk=1)
块大小将被1
,因此最多可以并行运行五个工作进程。您的输入可迭代中根本没有足够的项来使用所有工作进程。
作为旁注:test_list
应在 if __name__ == '__main__':
块中定义。