学习python -- 第018天 多进程

进程概念

进程(Process)是资源分配的最小单位,它是操作系统进行资源分配和调度运行的基本单位,通俗理解:一个正在运行的程序就是一个进程.例如:正在运行的qq,微信等他们都是一个进程

 

多进程作用

学习python -- 第018天 多进程

 

 

 

多进程完成多任务


1.导入进程包
import multiprocessing
2.通过进程类创建进程对象
进程对象=multiprocessing.Proces()
3.启动进程执行任务
进程对象.start()

 

学习python -- 第018天 多进程

 

 

 

实例

学习python -- 第018天 多进程
 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

 

上一篇:关于multiprocessing中的logging的数据打印到本地失败或重复问题


下一篇:一个无锁消息队列引发的血案(三)——地:q3.h 与 RingBuffer