我对多处理感到有些困惑。我是一名3年的Python程序员,但从来没有真正需要并行执行任务(不仅仅是异步)。但我所知道或者想知道的是,当在Python中使用multiprocessing
模块来实现“真正的并行性”时,会产生新的python.exe
进程!
例如Cinema 4D之类的3D软件使用可用于渲染3D场景的所有CPU的强大功能。但我在任务管理器中看不到多个Cinema 4D.exe
进程。
multiprocessing
模块时会产生多个Python进程?答案 0 :(得分:6)
通过在同一进程中运行多个线程,也可以使用多个CPU。这不是Python multiprocessing
模块的功能。
Python中有一个threading
模块。不幸的是,在CPython中,线程没有你想象的那么有用,因为它们都在争夺所谓的“全局解释器锁”。因此,它们在Python中的并行性远远低于许多其他语言。如果使用线程,则需要担心代码中的哪些操作才真正并行。如果您使用流程,则不会(尽管您可能会担心其他事情,例如共享数据)。
我不知道Python的替代实现是否与GIL具有相同的问题。但除非您专门为Jython / IronPython编写代码,否则CPython的限制将适用于您的程序......
答案 1 :(得分:1)
我是否正确上述声明,即多个Python进程 在使用多处理模块时会产生什么?
是的,这是正确的。 Python需要生成新进程(运行其他解释器)才能并行运行。这是因为GIL(GlobalInterpreterLock)只允许每个解释器执行一个执行线程。
如果是这样,为什么会这样,以及C ++应用程序如何在没有CPU的情况下使用所有CPU 多个过程?
好吧,可能在Cinema4D中没有类似GIL的东西 - 因此它可以并行执行多个线程。
答案 2 :(得分:1)
通常,您运行多个THREADS,而不是多个PROCESSES。运行线程而不是进程有许多优点。主要优点是属于该进程的所有内存在线程之间共享,您必须在其中设置某种排序内存共享协议以在不同进程之间共享(某些部分)数据。
Python和C ++都支持多线程处理,但正如其他地方所提到的,python代码无法在多个处理器上运行。然而,它可以用于"半并行" (我使用python线程读取文件并在声卡上播放,同时记录并保存另一个文件,同时在串口上发出其他命令来控制设备"正在测试" 34)。
Python模块multiprocessing
确实用于使用多个单独的进程,这有助于打破python解释器锁定"。
通常,如果您希望代码完全独立于系统中运行的其他任务,并且不必在进程之间共享[多]数据,则在单独的进程中运行会更有用 - 例如计算非常大的素数在一个独立的过程中是一件好事[我的意思是具有几十万或更多数字的过程] - 该过程独立运行,没有其他输入数小时和小时结束,它只需要少量不会改变的输入 - "素数候选者"。