从零开始学python | 如何在Python中最好地实现多进程?

举报
Yuchuan 发表于 2021/04/09 00:04:41 2021/04/09
【摘要】 进程p1和p2均独立于其各自的内存运行。两者都完成执行后,程序将终止。 这使我们结束了关于Python中的多处理的本文的结尾

对于全球的技术发展而言,2019年是非常重要的一年。从计算机制造商向其CPU和处理器添加更多内核,到在手机中推出更智能的芯片开始,多处理不再是梦想。如今,Python是支持多进程的最杰出的编程语言之一。由于在其发行版中引入了并行处理功能,因此世界各地的编码人员现在都可以无缝地创建要同时执行的代码,从而大大缩短了它们的运行时间。 

本文将介绍以下指针,

让我们开始吧,

Python中的多进程

什么是多进程?

可以将多进程简单地定义为系统在任何给定实例中支持多个操作的能力。这意味着将多进程系统中的应用程序分解成小块,然后彼此独立运行,以提高效率并减少总体运行时间。系统中的处理器为每个小块分配一个自己的独立线程,从而使其可以充当独立实体。 

多重进程的需求

想象一下一个计算机系统,它的处理器中只有一个内核。如果将多个任务分配给该单个内核,则它将中断每个任务之间的任务,然后切换到下一个任务。这不会增加完成每个任务所需的时间,但也会降低系统的整体效率。 

另一方面,多处理计算机可以具有一个处理器,该处理器内部又具有多个功能单元,这些功能单元称为独立内核,它们具有同时独立运行多个不同任务的能力。这不仅提高了系统的效率,而且从长远来看,极大地减少了系统的运行时间。 

Python中的多进程系统可以有两种类型。 

Multi Processor System

这个系统基本上在其引擎盖下有多个处理器,每个处理器一次可以执行一个任务,并作为一个独立的组件运行。 

Multi-core Processor System

该系统具有位于同一处理器中的多个内核,这些内核在其中充当单独的单元并独立执行分配给它的任务。 

在Python中进行多进程的代码

既然您已经习惯了多进程的基本概念,那么让我们探索如何在Python中实现多进程。 

在Python中,解释器包含一个非常简单直观的API,该API承担一项任务,将其分解为多个组件,并对其进行独立处理。 

请看下面的程序模块,以更好地理解python中的多处理这一概念。

例子1

# importing the multiprocessing module
import multiprocessing
def print_cube(num):
"""
function to print cube of given num
"""
print("Cube: {}".format(num * num * num))
def print_square(num):
"""
function to print square of given num
"""
print("Square: {}".format(num * num))
if __name__ == "__main__":
# creating processes
p1 = multiprocessing.Process(target=print_square, args=(10, ))
p2 = multiprocessing.Process(target=print_cube, args=(10, ))
# starting process 1
p1.start()
# starting process 2
p2.start()
# wait until process 1 is finished
p1.join()
# wait until process 2 is finished
p2.join()
# both processes finished
print("Done!") 

输出

平方:100

立方:1000

完毕!

现在让我们分析该程序以更好地理解它。

  1. 第一步是导入多处理模块。为此,请使用以下语法:导入多处理。

  2. 现在已经导入了多处理模块,让我们继续前进并创建一个过程。为此,我们创建一个Process类的对象,并为其分配以下参数。目标:此进程需要执行的函数,而参数:需要传递给目标函数的参数。 

注意:流程构造函数具有接受多个目标和参数的能力。但是在上面的示例中,我们仅为Process分配了两个目标和参数,如下所示。 

p1 = multiprocessing.Process(target = print_square,args =(10,))

p2 = multiprocessing.Process(target = print_cube,args = {10,))

  1. 现在已经创建了该过程,让我们编写启动该过程的语法。 

p1.start()

p2.start()

一旦该过程开始,当前程序和已经执行的程序将同时运行。如果在某种情况下,您需要停止当前程序的执行,而只专注于现有程序的执行,则可以使用如下所示的join函数。 

p1.join()

p2.join()

输入此语法后,解释器将等待程序p1完成执行,然后继续执行程序p2。

为了进一步理解该概念,请看下面的另一个“ Python中的多处理”示例。 

例子2

# importing the multiprocessing module
import multiprocessing
import os
def worker1():
# printing process id
print("ID of process running worker1: {}".format(os.getpid()))
def worker2():
# printing process id
print("ID of process running worker2: {}".format(os.getpid()))
if __name__ == "__main__":
# printing main program process id
print("ID of main process: {}".format(os.getpid()))
# creating processes
p1 = multiprocessing.Process(target=worker1)
p2 = multiprocessing.Process(target=worker2)
# starting processes
p1.start()
p2.start()
# process IDs
print("ID of process p1: {}".format(p1.pid))
print("ID of process p2: {}".format(p2.pid))
# wait until processes are finished
p1.join()
p2.join()
# both processes finished
print("Both processes finished execution!")
# check if processes are alive
print("Process p1 is alive: {}".format(p1.is_alive()))
print("Process p2 is alive: {}".format(p2.is_alive())) 

输出

主进程号:18938

进程运行worker1的ID:18939

进程运行worker2的ID:18940

进程p1的ID:18939

进程p2的ID:18940

两个过程都完成了执行!

进程p1仍然存在:False

进程p2仍然存在:False

请注意,在上述程序中,进程p1和p2均独立于其各自的内存运行。两者都完成执行后,程序将终止。

这使我们结束了关于Python中的多处理的本文的结尾

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。