在我的 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()
答案 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()