多处理=多个进程正在运行?

2024-06-02 05:21:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我对多重处理有点困惑。我是一个3年的Python程序员,但是从来没有真正需要并行执行任务(不仅仅是异步执行)。但是我知道的,或者我想知道的是,当使用Python中的multiprocessing模块来实现“真正的并行”时,就会产生新的python.exe进程!在

例如,Cinema 4D这样的3D软件使用所有可用cpu的能力来渲染3D场景。但是我在任务管理器中没有看到多个Cinema 4D.exe进程。在

  1. 我对上面的语句是正确的,即在使用multiprocessing模块时会产生多个Python进程?在
  2. <如果是,为什么是,C++应用程序如何使用没有多个进程的所有CPU?在

Tags: 模块管理器软件进程场景能力语句cpu
3条回答

通常,您将运行多个线程,而不是多个进程。运行线程比运行进程有许多优点。它的主要优点是属于进程的所有内存都在线程之间共享,因此必须设置某种排序内存共享协议,以便在不同进程之间共享(部分)数据。在

Python和C++都支持多读,但如别处所提到的,Python代码不能在多个处理器上运行。然而,它对于在“半并行”中进行操作非常有用(我使用python线程读取一个文件并在声卡上播放,同时录制和保存另一个文件,同时在串行端口上发出其他命令来控制“正在测试”的设备)。在

Python模块multiprocessing实际上是为了使用多个独立的进程,这有助于“打破Python解释器锁”。在

一般来说,如果希望代码完全独立于系统中运行的其他任务,那么在单独的进程中运行更有用,并且不必在进程之间共享[很多]数据-例如,在独立进程中计算非常大的质数是一件好事[我是指那些有几十万个或更多位数的数字]-该进程独立运行,连续数小时没有其他输入,它只需要少量不变的输入——“质数候选者”。在

Am I correct with the statement above, that multiple Python processes are spawned when using the multiprocessing module?

是的,没错。Python需要产生新的进程(运行额外的解释器)来并行操作。这是因为GIL(GlobalInterpreterLock)只允许每个解释器有一个执行线程。在

If so, why is it, and how can the C++ application use all CPUs without multiple processes?

好吧,大概在Cinema4D中没有GIL这样的东西,因此它可以并行执行多个线程。在

也可以通过在同一进程中运行多个线程来使用多个cpu。这不是Pythonmultiprocessing模块所做的。在

Python中有一个threading模块。不幸的是,在CPython中,线程并不像您想象的那么有用,因为它们都在所谓的“全局解释器锁”上竞争。所以它们在Python中的并行性比在其他许多语言中要少得多。如果使用线程,则需要担心代码中的哪些操作真正是并行的。如果您使用不使用的流程(尽管您可能会担心其他事情,例如共享数据)。在

我不知道Python的其他实现是否与GIL有相同的问题。但是,除非您是专门为Jython/IronPython/whatever编写代码,否则CPython的限制适用于您的程序。。。在

相关问题 更多 >