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

gat*_*ath 69 python multicore

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

Gly*_*yph 96

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

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

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

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

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

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

  • 那些是多处理器应用程序......不确定我是否明白了这一点.我想这样说:大多数人都明白"多核编程"和"多处理器编程"的含义.因此OP的问题可以转换为"是否有可能在python中编写在多个内核/处理器上运行的程序?" 你说的条款无效 - 嗯,它们是.这就是我想要添加的内容. (8认同)
  • 并不是说线程需要*思考*才能使用; 当然,所有编程都需要思考.线程的问题在于它们需要*在每一行代码中始终了解它们的存在*.相比之下,如果您使用消息传递进行编程,则可以忘记所有外部系统,直到您的功能完成并且是时候接收下一条消息.共享可变状态多线程编程对程序员产生持续的,严重的焦虑,或者为用户提供不可能再现的不断流. (6认同)
  • *没有"多处理器"或"多核"编程* - 确定有.*多核*编程正在编写利用多核的应用程序. (3认同)
  • 对不起,但我不得不不同意你的线程意见。使用好线程确实需要一些思考和适当的设计,但我们应该是知道如何思考和解决问题的程序员。是的,它们可能会被滥用,但这同样适用于我们所做的几乎所有事情。为什么仅仅因为需要思考才能使用工具而忽略它?多个进程只是不一样。如果您想使用无法腌制的对象,则需要设置/拆卸、浪费内存、通信开销和祝您好运的开销。哦,是的,只需围绕限制重新设计您的应用程序 (2认同)

rsl*_*ite 24

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


Map*_*pad 5

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

  • 使用 进程模块,并划分代码以执行每个处理器的进程
  • 看一下 parallelpython模块
  • 如果使用python> 2.6,请查看多进程模块.


mil*_*lot 2

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

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