使用“Pool”进行多处理在 M1 Macbook 上引发错误

时间:2021-06-16 09:05:04

标签: python multiprocessing python-multiprocessing apple-m1

在我的 Macbook Pro(英特尔,2020 年)上,我可以成功使用 keytool -printcert -rfc -sslserver www.google.com,例如:

multiprocessing.Pool

但是,如果我在 Macbook Air(M1,2020)上运行相同的代码,我会一次又一次地重复出现奇怪的错误(下面的代码段):

from multiprocessing import Pool

p = Pool(8)
results = p.map(worker_function, list_of_inputs)
p.close()

1 个答案:

答案 0 :(得分:1)

为了解决这个问题,我首先阅读了this blog post。作者解释了 Python 启动新线程的不同方式,例如通过fork-ing(基本上复制现有的解释器及其大部分内存),产生-ing 新的解释器,等等。

In the official documentation,看来 OSX 上的默认启动方法是 fork。但是,我注意到,在我的 Macbook(M1,2020)上,如果我运行:

import multiprocessing

multiprocessing.get_start_method()

我得到 "spawn"

因此,我通过在创建池时明确声明我想要 "fork" 启动方法来解决问题

from multiprocessing import get_context

p = get_context("fork").Pool(8)
results = p.map(worker_function, list_of_inputs)
p.close()