Python面试题
Python中如何使用多个CPU核心?
Python中有个GIL, GIL是 Global Interpreter Lock
的缩写,其作用是,在Python使用多线程的时候,所有的线程去抢一个锁,抢到了锁的线程就可以获得CPU时间。使用GIL的主要目的是为了简化Python解释器的实现(Python中的标准库里,如无声明,大部分库都不是并发安全的),而缺点就是无法充分的利用机器的多核。
因此,为了使用多核,就必须摆脱 GIL 的限制,通常有这么几种方式:
- 使用进程池:Python中的一个进程中的多个线程会争一个GIL,但是不同的进程之间却不会。因此可以使用进程池。
- 使用
pypy
:pypy默认提供的版本仍然有GIL,但是有一个实验版本是去除了GIL的,但是目前还不能在生产上跑。
参考:http://doc.pypy.org/en/latest/faq.html#does-pypy-have-a-gil-why