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

Jun*_* HU 57 python subprocess multiprocessing

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

Mar*_*ers 76

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

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

  • @glglgl:对不起,我给你带来了痛苦.谢谢你清理.:-)让我们看看我是否可以控制我的撇号! (9认同)
  • @mins:新进程作为当前进程的分支运行,然后通过“execv”或“execve”系统调用由子进程替换。不涉及任何线程,它们也不会帮助更快地创建新进程。通信主要由管道(即操作系统)处理。如果你想使用线程,你可以,或者你可以使用 asyncio。你的选择。 (3认同)

unu*_*tbu 29

如果你想调用一个外部程序(特别是一个不是用Python编写的程序)使用subprocess.

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

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

  • 如果它是一个外部程序并且我想在多个处理器上运行它怎么办? (2认同)
  • 您可以启动多个[非阻塞`subprocess.call`s](/sf/ask/1125030651/).任何现代操作系统都应该在可用处理器上同时运行进程.您还可以启动[来自线程池的子进程](/sf/answers/1874864561/)以限制同时启动的子进程数. (2认同)

DNS*_*DNS 14

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

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