一 概念
# 什么是进程 : 运行中的程序,计算机中最小的资源分配单位
# 程序开始执行就会产生一个主进程
# python中主进程里面启动一个进程 —— 子进程
# 同时主进程也被称为父进程
# 父子进程之间的代码执行是异步的,各自执行自己的
# 父子进程之间的数据不可以共享
# 主进程会等待子进程结束之后再结束
二例子
#开启一个子进程
1 import os 2 import time 3 from multiprocessing import Process 4 def func(num): 5 print(num,os.getpid()) 6 time.sleep(0.5) 7 print(num,os.getpid()) 8 time.sleep(0.5) 9 if __name__ == '__main__': 10 p=Process(target=func,args=(10,)) 11 p.start() 12 print(os.getpid(),0) 13 time.sleep(1) 14 print(os.getpid(),1)
##父进程和子进程数据不可以共享,打印n为100
1 n=100 2 def func(): 3 global n 4 n=0 5 print('------') 6 time.sleep(3) 7 if __name__ == '__main__': 8 Process(target=func).start() 9 time.sleep(1) 10 print(n) 11 12 13 结果:打印n为100
#开启多个子进程
1 def func(n): 2 time.sleep(1) 3 print('_'*n) 4 if __name__ == '__main__': 5 l=[] 6 for i in range(10): 7 p=Process(target=func,args=(i,)) 8 p.start() 9 l.append(p) 10 11 print('子进程开始了') 12 for p in l:p.join() 13 print('10条信息已经发送完毕')
#守护进程
# 守护进程也是一个子进程
# 当主进程的代码执行完毕之后自动结束的子进程叫做守护进程
#当主进程结束的时候守护进程才结束
1 def deamon_func(): 2 while True: 3 print('我还活着') 4 time.sleep(0.5) 5 def wahaha(): 6 for i in range(10): 7 time.sleep(1) 8 print(i*'#') 9 if __name__ == '__main__': 10 p2=Process(target=wahaha) 11 p2.start() 12 p=Process(target=deamon_func) #先执行这个,这个是守护进程 13 p.daemon=True 14 p.start() 15 for i in range(3): 16 print(i*'##') 17 time.sleep(1) 18 p2.join()
总结
# 开启一个子进程 start
# 子进程和主进程是异步
# 如果在主进程中要等待子进程结束之后再执行某段代码:join
# 如果有多个子进程 不能在start一个进程之后就立刻join,把所有的进程放到列表中,等待所有进程都start之后再逐一join
# 守护进程 —— 当主进程的"代码"执行完毕之后自动结束的子进程叫做守护进程