进程概念
进程(Process)是资源分配的最小单位,它是操作系统进行资源分配和调度运行的基本单位,通俗理解:一个正在运行的程序就是一个进程.例如:正在运行的qq,微信等他们都是一个进程
多进程作用
多进程完成多任务
1.导入进程包
import multiprocessing
2.通过进程类创建进程对象
进程对象=multiprocessing.Proces()
3.启动进程执行任务
进程对象.start()
实例
1 # 2 # @author:浊浪 3 # @version:0.1 4 # @time: 2021/8/1 11:29 5 # 6 7 # 导包 8 import time 9 import multiprocessing 10 def sing(): 11 for i in range(3): 12 print('sing...') 13 time.sleep(0.5) 14 15 def dance(): 16 for i in range(3): 17 print('dance...') 18 time.sleep(0.5) 19 20 if __name__ == '__main__': 21 # 2.使用进程类创建进程对象 22 # target:指定进程执行的函数名 23 sing_process = multiprocessing.Process(target = sing) 24 dance_process = multiprocessing.Process(target = dance) 25 # 3.使用进程对象启动进程执行指定任务 26 sing_process.start() 27 dance_process.start()多进程
带参数的多进程
参数名 | 说明 |
args |
以元组的方式给执行任务传参 |
kwargs | 以字典方式给执行任务传参 |
1 if __name__ == '__main__': 2 # 使用进程类创建进程对象 3 # target:指定进程执行的函数名#args:使用元组方式给指定任务传参 4 # 元组的元素顺序就是任务的参教顺序 5 # kwargs:使用字典方式给指定任务传参 6 # key名就是参数的名字 7 def sing(name,num): 8 pass 9 def dance(name,num): 10 pass 11 sing_process = multiprocessing.Process(target = sing,args =("xiaoming",3)) 12 dance_process = multiprocessing.Process(target = dance,kwargs = {"name":"传智","num":2})
获取进程编号
进程编号的作用:
当程序中进程的数量越来越多时,如果没有办法区分主进程和子进程还有不同的子进程,那么就无法进行有效的进程管理,为了方便管理实际上每个进程都是有自己编号的.
获取进程编号的两种方式:
1.获取当前进程编号: os.getpid()
2.获取当前父进程编号: os.getppid()
进程注意点
主进程会等待所有的子进程执行结束再结束
1 # 2 # @author:浊浪 3 # @version:0.1 4 # @time: 2021/8/1 12:53 5 # 6 import multiprocessing 7 import time 8 def work(): 9 for i in range(10): 10 print("工作中..") 11 time.sleep(0.2) 12 13 if __name__ == '__main__': 14 15 #创建子进程 16 work_process=multiprocessing.Process(target=work) 17 work_process.start() 18 #让主进程等待1秒钟 19 time.sleep(1) 20 print("主进程执行完成了啦") 21 #总结:主进程会等待所有的子进程执行完成以后程宇再退出 22 23 ''' 24 输出: 25 工作中.. 26 工作中.. 27 工作中.. 28 工作中.. 29 工作中.. 30 主进程执行完成了啦 31 工作中.. 32 工作中.. 33 工作中.. 34 工作中.. 35 工作中.. 36 '''
设置守护主程序
在进程开始之前,即17行之前加上下面语句
1 #设置守护主进程主进程退出后子进程直接销毁,不再执行子进程中的代码 2 work_process.daemon = True
为了保证子进程能够正常的运行,主进程会等所有的子进程执行完成以后再销毁,设置守护主进程的目的是主进程退出子进程销毁,不让主进程再等待子进程去执行。
设置守护主进程方式:子进程对象.daemon=True