从零开始学python | 如何在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
完毕!
现在让我们分析该程序以更好地理解它。
-
第一步是导入多处理模块。为此,请使用以下语法:导入多处理。
-
现在已经导入了多处理模块,让我们继续前进并创建一个过程。为此,我们创建一个Process类的对象,并为其分配以下参数。目标:此进程需要执行的函数,而参数:需要传递给目标函数的参数。
注意:流程构造函数具有接受多个目标和参数的能力。但是在上面的示例中,我们仅为Process分配了两个目标和参数,如下所示。
p1 = multiprocessing.Process(target = print_square,args =(10,))
p2 = multiprocessing.Process(target = print_cube,args = {10,))
-
现在已经创建了该过程,让我们编写启动该过程的语法。
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中的多处理的本文的结尾
- 点赞
- 收藏
- 关注作者
评论(0)