我编写了一个简单的多处理代码,但我认为它不起作用。
当我在笔记本电脑上尝试此代码时,我通过活动监视器应用程序检查了处理器,结果表明某些处理器正常工作。因此,使用此代码,我在工作站上运行了该程序(核心最多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使用率会比此增加。我在哪里做错了什么?
答案 0 :(得分:1)
您的池中有24个进程,但是可迭代的test_list
中只有5个项目。
当您从我的答案here中选择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)
Chunksize将为1
,因此最多可以并行运行五个工作进程。您的输入可迭代项中根本没有足够的项目来使用所有工作进程。
请注意:test_list
应该在if __name__ == '__main__':
块中定义。