我的工作需要使用并行技术,而我是Python的新用户。我想知道您是否可以分享一些有关Python multiprocessing
和subprocess
模块的资料。这两者之间有什么区别?
我的工作需要使用并行技术,而我是Python的新用户。我想知道您是否可以分享一些有关Python multiprocessing
和subprocess
模块的资料。这两者之间有什么区别?
multiprocessing
模块允许您将编写的Python任务分割成多个进程,以提高性能。它提供了一个非常类似于 threading
模块的API; 它提供了方法来跨进程共享数据,并使管理多个进程运行Python代码的任务(更)容易。换句话说,multiprocessing
让您利用多个进程通过并行执行代码来更快地完成任务。
execv
或execve
系统调用来替换子进程。创建新进程时不涉及线程,并且线程也无法加速创建新进程的过程。通信主要由管道(pipes)(即操作系统)处理。如果想使用线程,可以使用,或者可以使用asyncio。由你选择。 - Martijn Pieterssubprocess
。multiprocessing
。multiprocessing
调用其函数,而不是通过subprocess
外部调用它。)subprocess.call
。任何现代操作系统都应该能够在可用处理器上并发运行这些进程。你也可以从线程池中启动subprocesses,以限制同时启动的子进程数量。 - unutbu子进程创建新进程,但除了标准输入/输出和其他程序可能实现的任何API之外,您没有与它们通信的方式。它的主要目的是启动与您自己的程序完全分离的进程。
多处理也会生成新进程,但它们运行您的代码,并且旨在相互通信。您可以将其用于在多个CPU核心之间划分自己程序中的任务。
subprocess
生成的进程不能(或很难)利用使用multiprocessing.Process
启动的进程之间的通信方式,例如通过multiprocessing.Manager
进行通信。 - martineau
greenlets
- 但在理解了您的 OP 所给出的答案之前,请避免使用它们。 - Jon Clements