进程的介绍:
在python程序中,想要实现多任务可以使用进程来完成,进程是实现多任务的一种方式
进程的概念
一个正在运行的软件或者程序就是一个进程,他是操作系统进行资源分配的基本单位,也就是说每启动一个进行进程,操作系统机会为其分配一定的运行资源保证进程的运行
多进程的使用
1.导入进程包
from multiprocess import Process
2.Process进程类的说明
Process(group,target,name,args,kwargs)
.group:指定进程组,目前只能使用None
.target:执行的目标文件名
.name:进程名字
.args:以元祖方式给执行任务传递参数
.kwargs:以字典的方式给执行任务进行传递参数
Process创建的实例对象的常用方法
.start()进程的启动(创建子进程)
.join()等待子进程结束
.terminate()不管任务是否完成,立即终止子进程
多进程完成任务的实例代码
#coding:utf-8 2 #1.导入进程包 3 import multiprocessing 4 import time 5 #创建目标函数 6 def process1(): 7 for i in range(3): 8 print("吃饭") 9 time.sleep(0.2) 10 11 def process2(): 12 for i in range(3): 13 print("睡觉") 14 time.sleep(0.2) 15 #创建子进程 16 process_1 = multiprocessing.Process(target = process1) 17 #3.启动进程执行的任务 18 process_1.start() 19 20 #主进程执行process2 21 process2() 22 #运行结果 睡觉 吃饭 睡觉 吃饭 睡觉 吃饭
进程的注意点
.进程之间不共享全局变量
实验代码
#coding:utf-8 2 #进程的注意点 3 #1.进程之间不共享全局变量 4 #2.主进程会等待所有子进程结束后再结束 5 from multiprocessing import Process 6 import time 7 g_list = list() 8 9 def add_date(): 10 for i in range(3): 11 print("add",i) 12 #因为列表是可变类型,可以在原有的内存的基础上修改数 据,所以不需要添加global关键字 13 g_list.append(i) 14 time.sleep(0.2) 15 16 def read_date(): 17 print(g_list) 18 19 add_process = Process(target = add_date) 20 read_process = Process(target = read_date) 21 #在windows系统中需要用if __name__ == "__main__"来进> 行判断书否为主模块,否则则会出错,因为糊一直递归创建子进行进 程,从而程序报错 22 #直接执行的模块就是主模块,那么直接执行的模块里面就应该添加 判断是否为主模块的代码 23 """" 24 if __name__ == "__main__": 25 add_process = Process(target = add_date) 26 read_process = Process(target = read_date) 27 """ 28 add_process.start() 29 #等待上一个进程结束后在开始下一个进程 30 add_process.join() 31 read_process.start() 32 #创建子进程是对主进程的资源的拷贝,子进程其实就是主进程的一 个副本 33 print("主进程的群居变量:",g_list) 34 #只有子进程的全局变量改变了,主进程的全局变量并没有发生改变 运行结果 add 0 add 1 add 2 主进程的群居变量: [] []