繁体   English   中英

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

[英]Multiprocessing = multiple processes running?

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

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

  1. 我是否正确使用上述语句,在使用multiprocessing模块时会产生多个Python进程?
  2. 如果是这样,为什么会这样,C ++应用程序如何在没有多个进程的情况下使用所有CPU?

通过在同一进程中运行多个线程,也可以使用多个CPU。 这不是Python multiprocessing模块的功能。

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

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

我是否正确使用上述语句,在使用多处理模块时会产生多个Python进程?

对,那是正确的。 Python需要生成新进程(运行其他解释器)才能并行运行。 这是因为GIL( GlobalInterpreterLock )只允许每个解释器使用一个执行线程。

如果是这样,为什么会这样,C ++应用程序如何在没有多个进程的情况下使用所有CPU?

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

通常,您运行多个THREADS,而不是多个PROCESSES。 运行线程而不是进程有许多优点。 主要优点是属于该进程的所有内存在线程之间共享,您必须设置一些排序内存共享协议以在不同进程之间共享(某些部分)数据。

Python和C ++都支持多线程处理,但正如其他地方所提到的,python代码无法在多个处理器上运行。 然而,它可以用于“半并行”(我使用python线程来读取文件并在声卡上播放它,同时记录并保存另一个文件,同时在其上发出其他命令)用于控制“被测试”设备的串口。

Python模块multiprocessing确实用于使用多个单独的进程,这有助于“打破python解释器锁”。

通常,如果您希望代码完全独立于系统中运行的其他任务,并且不必在进程之间共享[多]数据(例如计算非常大的素数),则在单独的进程中运行会更有用在一个独立的过程中做一件好事[我的意思是数十万或更多的数字] - 这个过程独立运行,没有其他输入数小时和小时结束,它只需要少量不改变的输入 - “素数候选”。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM