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

时间:2012-11-28 14:02:29

标签: python subprocess multiprocessing

我的工作应该使用并行技术,我是python的新用户。所以我想知道你是否可以分享一些有关python multiprocessingsubprocess模块的资料。这两者有什么区别?

3 个答案:

答案 0 :(得分:72)

subprocess模块可让您运行和控制其他程序。可以使用此模块运行和控制您可以从计算机上的命令行开始的任何操作。使用它将外部程序集成到Python代码中。

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

答案 1 :(得分:29)

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

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

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

答案 2 :(得分:12)

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

多处理还会生成新进程,但它们运行您的代码,并且旨在相互通信。您可以使用它在多个CPU内核中划分自己程序中的任务。