python是否支持多处理器/多核编程?
多处理器编程和多核编程有什么区别? 最好在Python中显示例子如何编写一个多程序和多核编程的小程序
没有“多处理器”或“多核”编程这样的事情。 作为应用程序员,“多处理器”和“多核” 计算机之间的区别可能与您无关; 它与核心如何共享内存的细节有关。
为了利用多核(或多处理器)计算机,您需要一个可以并行运行的程序,以及一个允许程序在多个核上并行执行的运行库(以及操作系统,尽pipe任何可以在PC上运行的操作系统都可以)。 这是真正的并行编程,虽然有不同的并行编程方法。 与Python相关的是多处理和multithreading。
在C,C ++,Java和C#等语言中,可以通过执行多个线程编写并行程序。 CPython和PyPy运行时中的全局解释器locking排除了此选项; 但只限于那些运行时间。 (在我个人看来,multithreading是危险而棘手的,Python鼓励你不要把它视为获得性能优势的一种方式。
如果你想编写一个可以在Python中运行在多核上的并行程序,你可以select一些不同的选项:
- 使用
threading
模块编写multithreading程序并在IronPython或Jython运行时运行它。 - 使用
processing
模块(现在包含在Python 2.6中作为multiprocessing
模块),可以同时在多个进程中运行代码。 - 使用
subprocess
模块运行多个python解释器并在它们之间进行通信。 - 使用扭曲和安瓿 。 这样做的好处是不仅可以跨不同的进程运行你的代码,而且可以跨越不同的计算机运行你的代码(如果你不能共享像文件一样的东西)。
无论您select哪个选项,您都需要了解如何将您的程序正在完成的工作拆分为可以分离的区块。 由于我不确定你正在考虑写什么types的程序,所以很难提供一个有用的例子。
正如另一篇文章中提到的那样,Python 2.6具有多处理模块,它可以利用多个内核/处理器(通过透明地启动多个进程来获取GIL)。 它提供了一些类似于线程模块的原语。 您将在文档页面中find一些(简单的)使用示例。
你实际上可以编写使用多个处理器的程序。 由于GIL锁,你不能用线程来完成它,但你可以用不同的进程来完成。 或者:
- 使用subprocess模块,并将您的代码划分为每个处理器执行一个进程
- 看看parallelpython模块
- 如果你使用python> 2.6看看多进程模块。
你可以阅读有关Python中的multithreading,以及一般的线程
Python中的multithreading: http : //www.devshed.com/c/a/Python/Basic-Threading-in-Python/
如果我正确地理解了这些东西,那么Python有一个叫GIL(Global Interpreter Lock,全局解释器锁)的东西,它有效地使得在Python中执行多个线程时不可能利用多核。
请参阅Guido van Rossum关于该主题的博客文章 。 据我所知,在“主stream”语言中,只有C / C ++和Java才能有效地支持多核。
主要区别在于您如何组织和分发数据。 多核通常在CPU的不同核心之间具有更高的带宽,并且多处理器需要在更多的CPU之间涉及总线。
Python 2.6已经得到了多进程(程序运行中的进程)以及multithreading编程的更多同步和通信对象。
如果您没有Python 2.6(例如,如果您使用的是Ubuntu Edgy或Intrepid,则不需要),则可以使用Google代码多处理的backported版本。 它是PyPI的一部分,这意味着您可以使用EasyInstall(它是Ubuntu中的python-setuptools软件包的一部分)轻松安装它。
但要记住,如果你也关心性能,那么使用Python是个问题。 与Java或C#相比,它的速度真的很慢,因为它仍然是解释的,而不是JIT编译的,解释器效率不高。 为了使速度更快,最stream行的build议(从手动内联到编写C扩展)将使您的程序不易读取。 所以使用Java或C#可能是一个更好的select,特别是如果你需要从头开始。
像Psyco这样的东西没有,但Psyco有一些错误,并没有加快所有的代码。 而且他们仍然不支持multithreading。
Jython和IronPython支持真正的multithreading。 然而,Jython甚至比CPython慢,而IronPython并不比CPython快,即使它运行在高效的VM之上,例如JIT编译。