多重处理和子流程有什么区别?


76

我的工作应该使用并行技术,并且我是python的新用户。因此,我想知道您是否可以共享有关pythonmultiprocessingsubprocess模块的一些资料。两者有什么区别?


@MartijnPieters是的,我对这两个类似的模块感到困惑
HU Jun

可能还会关注greenlets-但要避免使用这些方法,直到您了解对OP给出的答案为止
乔恩·克莱门茨

Answers:


97

subprocess模块使您可以运行和控制其他程序。您可以使用计算机上的命令行启动的任何内容,都可以使用此模块运行和控制。使用它可以将外部程序集成到您的Python代码中。

multiprocessing模块可让您将以python编写的任务划分为多个进程,以帮助提高性能。它提供与该threading模块非常相似的API 。它提供了在创建的进程之间共享数据的方法,并使管理多个进程以运行Python代码的任务更加容易。换句话说,multiprocessing通过并行执行代码,您可以利用多个过程来更快地完成任务。


10
@glglgl:对不起,我让你痛苦。感谢清理。:-)让我们看看是否可以检查我的撇号!
马丁·彼得斯

35

如果要调用外部程序(尤其是非Python编写的程序),请使用subprocess

如果要在子进程中调用Python函数,请使用multiprocessing

(如果程序是用Python编写的,但也可以导入,那么我将尝试使用multiprocessing而不是通过外部调用它的函数来调用其函数subprocess。)


1
如果它是一个外部程序,并且我想在多个处理器上运行该怎么办?
Mooncrater

您是否要多次运行外部程序,还是要以利用多个处理器的方式将外部程序作为一个进程运行?
unutbu

多次并行。确切地说,OCRing多个图像文件。
Mooncrater

2
您可以启动多个非阻塞subprocess.call小号。任何现代操作系统都应在可用处理器上同时运行进程。您还可以从线程池启动子流程,以限制同时启动的子流程的数量。
unutbu

你能看看这个吗?
Mooncrater

16

子进程产生了新的进程,但是除了stdin / stdout以及其他程序可能实现的其他API之外,您无法与它们进行通信。其主要目的是启动与您的程序完全独立的进程。

多重处理还会产生新的流程,但是它们会运行您的代码,并且旨在彼此通信。您可以使用它在多个CPU内核之间划分自己程序中的任务。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.