python是否支持多处理器/多核编程?

时间:2008-10-15 06:59:51

标签: python multicore

多处理器编程和多核编程有什么区别? 最好在python中展示如何编写用于多道程序设计的小程序的示例。多核编程

7 个答案:

答案 0 :(得分:96)

没有“多处理器”或“多核”编程之类的东西。 “多处理器”和“多核”计算机之间的区别可能与您作为应用程序员无关;它与核心如何共享内存访问权限的细微差别有关。

为了利用多核(或多处理器)计算机,您需要一个以可以并行运行的方式编写的程序,以及一个允许程序实际并行执行的运行时核心(和操作系统,尽管您可以在PC上运行的任何操作系统都可以执行此操作)。这实际上是并行编程,尽管并行编程有不同的方法。与Python相关的是多处理和多线程。

在C,C ++,Java和C#等语言中,您可以通过执行多个线程来编写并行程序。 CPython和PyPy运行时的全局解释器锁定排除了此选项;但仅适用于那些运行时。 (在我个人看来,多线程是dangerous and tricky,Python通常会鼓励你不要将它视为获得性能优势的一种方式。)

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

  • 使用threading模块编写多线程程序,并在IronPython或Jython运行时中运行它。
  • 使用processing模块(现在包含在Python 2.6中作为multiprocessing模块),一次在多个进程中运行代码。
  • 使用subprocess模块运行多个python解释器并在它们之间进行通信。
  • 使用TwistedAmpoule。这样做的好处是,不仅可以在不同的进程中运行代码,而且(如果您不能共享对文件之类的访问权限)也可能在不同的计算机上运行。

无论您选择哪个选项,您都需要了解如何将您的程序正在进行的工作拆分为有意义的分块。由于我不确定您正在考虑编写什么类型的程序,因此很难提供有用的示例。

答案 1 :(得分:24)

正如在另一篇文章中提到的,Python 2.6具有multiprocessing模块,它可以利用多个核心/处理器(通过透明地启动多个进程来绕过GIL)。它提供了一些类似于线程模块的原语。您可以在文档页面中找到一些(简单)用法示例。

答案 2 :(得分:5)

您实际上可以编写将使用多个处理器的程序。由于GIL锁定,您无法使用线程执行此操作,但您可以使用不同的进程执行此操作。 之一:

答案 3 :(得分:2)

您可以在python中阅读有关多线程的信息,以及一般的线程

Python中的多线程: http://www.devshed.com/c/a/Python/Basic-Threading-in-Python/

答案 4 :(得分:2)

如果我理解正确的话,Python会有一些名为GIL(全局解释器锁)的东西,它有效地使得在Python中执行多个线程时无法利用多核。

参见Guido van Rossum关于这个主题的blog entry。据我所知,在“主流”语言中,只有C / C ++和Java才能有效支持多核。

答案 5 :(得分:1)

主要区别在于您如何组织和分发数据。多核通常在cpu中的不同核心之间具有更高的带宽,而多处理器需要在cpu之间涉及总线。

Python 2.6已经实现了多进程(进程,如程序运行)以及更多用于多线程编程的同步和通信对象。

答案 6 :(得分:0)

如果您没有Python 2.6(例如,如果您使用的是Ubuntu Edgy或Intrepid则没有),您可以使用Google code backported版本的多处理。它是PyPI的一部分,这意味着您可以使用EasyInstall(它是Ubuntu中python-setuptools包的一部分)轻松安装它。