Python支持多处理器/多核心编程吗?

70 投票
7 回答
73477 浏览
提问于 2025-04-11 09:32

多处理器编程和多核编程有什么区别呢?

最好能用Python举个例子,展示一下怎么写一个小程序来实现多处理器编程和多核编程。

7 个回答

5

其实你可以写程序来使用多个处理器。虽然用线程不行,因为有个叫GIL的锁,但你可以用不同的进程来实现。

  • 可以使用subprocess模块,把你的代码分开,让每个处理器执行一个进程。
  • 可以看看parallelpython模块。
  • 如果你用的是python 2.6以上的版本,可以看看multiprocess模块。
24

在另一篇文章中提到,Python 2.6 有一个叫做 multiprocessing 的模块,这个模块可以利用多核处理器的优势(它通过启动多个进程来绕过全局解释器锁,操作起来很透明)。这个模块提供了一些和线程模块类似的基本功能。你可以在文档页面上找到一些(简单的)使用示例。

97

其实没有什么“多处理器”或“多核心”编程的说法。对于应用程序开发者来说,“多处理器”和“多核心”电脑的区别可能并不重要,这主要是关于核心如何共享内存的一些细节。

要充分利用多核心(或多处理器)电脑,你需要编写一个可以并行运行的程序,并且需要一个能让这个程序在多个核心上真正并行执行的运行环境(操作系统也是如此,不过你在电脑上能运行的任何操作系统都可以做到这一点)。这实际上就是并行编程,虽然并行编程有不同的方法。与Python相关的方法主要有多进程和多线程。

在像C、C++、Java和C#这样的语言中,你可以通过执行多个线程来编写并行程序。但在CPython和PyPy的运行环境中,由于有全局解释器锁,这种方法就行不通了;不过这只适用于这两种运行环境。(在我个人看来,多线程是危险且复杂的,Python鼓励你不要把它当作提高性能的方式,这通常是件好事。)

如果你想在Python中编写一个可以在多个核心上运行的并行程序,你有几种选择:

  • 使用threading模块编写一个多线程程序,并在IronPython或Jython运行环境中运行。
  • 使用processing模块(现在在Python 2.6中作为multiprocessing模块包含),让你的代码同时在多个进程中运行。
  • 使用subprocess模块来运行多个Python解释器,并在它们之间进行通信。
  • 使用TwistedAmpoule。这个方法的好处在于不仅可以在不同进程中运行你的代码,还可以(如果不共享文件等资源的话)在不同的电脑上运行。

无论你选择哪种方式,你都需要理解如何将程序的工作分成合理的部分。由于我不确定你想编写什么样的程序,所以很难提供一个有用的例子。

撰写回答