[英]Multiprocessing = multiple processes running?
我对多处理感到有些困惑。 我是一名3年的Python程序员,但从来没有真正需要并行执行任务(不仅仅是异步)。 但我知道或者想知道的是,当在Python中使用multiprocessing
模块来实现“真正的并行性”时,会产生新的python.exe
进程!
像Cinema 4D这样的3D软件使用所有可用CPU的功能来渲染3D场景。 但我没有在任务管理器中看到多个Cinema 4D.exe
进程。
multiprocessing
模块时会产生多个Python进程? 通过在同一进程中运行多个线程,也可以使用多个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.