2024-06-02 05:21:41 发布
网友
我对多重处理有点困惑。我是一个3年的Python程序员,但是从来没有真正需要并行执行任务(不仅仅是异步执行)。但是我知道的,或者我想知道的是,当使用Python中的multiprocessing模块来实现“真正的并行”时,就会产生新的python.exe进程!在
multiprocessing
python.exe
例如,Cinema 4D这样的3D软件使用所有可用cpu的能力来渲染3D场景。但是我在任务管理器中没有看到多个Cinema 4D.exe进程。在
Cinema 4D.exe
通常,您将运行多个线程,而不是多个进程。运行线程比运行进程有许多优点。它的主要优点是属于进程的所有内存都在线程之间共享,因此必须设置某种排序内存共享协议,以便在不同进程之间共享(部分)数据。在
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中的并行性比在其他许多语言中要少得多。如果使用线程,则需要担心代码中的哪些操作真正是并行的。如果您使用不使用的流程(尽管您可能会担心其他事情,例如共享数据)。在
threading
我不知道Python的其他实现是否与GIL有相同的问题。但是,除非您是专门为Jython/IronPython/whatever编写代码,否则CPython的限制适用于您的程序。。。在
通常,您将运行多个线程,而不是多个进程。运行线程比运行进程有许多优点。它的主要优点是属于进程的所有内存都在线程之间共享,因此必须设置某种排序内存共享协议,以便在不同进程之间共享(部分)数据。在
Python和C++都支持多读,但如别处所提到的,Python代码不能在多个处理器上运行。然而,它对于在“半并行”中进行操作非常有用(我使用python线程读取一个文件并在声卡上播放,同时录制和保存另一个文件,同时在串行端口上发出其他命令来控制“正在测试”的设备)。在
Python模块
multiprocessing
实际上是为了使用多个独立的进程,这有助于“打破Python解释器锁”。在一般来说,如果希望代码完全独立于系统中运行的其他任务,那么在单独的进程中运行更有用,并且不必在进程之间共享[很多]数据-例如,在独立进程中计算非常大的质数是一件好事[我是指那些有几十万个或更多位数的数字]-该进程独立运行,连续数小时没有其他输入,它只需要少量不变的输入——“质数候选者”。在
是的,没错。Python需要产生新的进程(运行额外的解释器)来并行操作。这是因为GIL(GlobalInterpreterLock)只允许每个解释器有一个执行线程。在
好吧,大概在Cinema4D中没有GIL这样的东西,因此它可以并行执行多个线程。在
也可以通过在同一进程中运行多个线程来使用多个cpu。这不是Python
multiprocessing
模块所做的。在Python中有一个
threading
模块。不幸的是,在CPython中,线程并不像您想象的那么有用,因为它们都在所谓的“全局解释器锁”上竞争。所以它们在Python中的并行性比在其他许多语言中要少得多。如果使用线程,则需要担心代码中的哪些操作真正是并行的。如果您使用不使用的流程(尽管您可能会担心其他事情,例如共享数据)。在我不知道Python的其他实现是否与GIL有相同的问题。但是,除非您是专门为Jython/IronPython/whatever编写代码,否则CPython的限制适用于您的程序。。。在
相关问题 更多 >
编程相关推荐