如何解决多处理池生成初始化非常慢,16 个进程需要 100 秒
在我的程序中,我需要生成 16 个多处理池,以便在我的 3950x 上使用 16 个内核。我有一个初始化程序,它在 spawn 子进程中初始化三个全局变量(总共大约 300kb)。
在使用初始化器之前,每个进程需要大约 1 秒的时间来生成。现在 16 个过程总共需要大约 100 秒!知道为什么现在这么慢吗?下面的示例代码:
def set_mp_global_vars(bc,bm,bf_n):
"""mp initialiser which sets global vars to reduce mp overhead"""
global base_comps,base_matches,bf_names
base_comps = bc
base_matches = bm
bf_names = bf_n
int_pool_workers = mp.cpu_count()
pool = mp.Pool(processes=int_pool_workers,initializer=set_mp_global_vars,initargs=(base_comps,bf_names))
解决方法
在 Windows 10 上使用 Python 3.9.2 并在 Threadripper CPU 上生成 30 个进程需要 23 秒,并启用 Pycharm 调试。如果我不调试就运行,需要0.21s。
pydev 调试器将 mp.Pool 减慢了 100 倍。
您还可以查看:python-3-6-multiprocessing-pool-very-slow-to-start-using-windows
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。