并发编程就是可以同时处理多个任务
2.并发的基石是 多道技术
什么是多道技术?
多道技术中的多道指的是多个程序,多道技术的实现是为了解决多个程序竞争或者说共享同一个资源(比如cpu)的有序调度问题,解决方式即多路复用,多路复用分为时间上的复用和空间上的复用.
空间复用:
同一时间,内存中存储了多个应用程序
不同应用程序之间的内存是相互独立的
时间复用:
当一个程序遇到IO操作时,会自动切换到其他应用程序,以此来提高CPU的利用率
3.并发与并行
什么是并发?
并发就是多个事件同时发生,也称之为伪并行
什么是并行?
并行就是多个事件同时进行
4.两种使用进程的方式
1.直接创建process对象,指定target对象
1 from multiprocessing import Process 2 3 def task(): 4 print('this is 子进程') 5 6 if __name__ == '__main__': 7 p = Process(target=task)
2.继承process 覆盖run方法
1 class MyProcess(Process): 2 3 def __init__(self,url): 4 self.url = url 5 super().__init__() 6 7 def run(self): 8 print('文件下载地址',self.url) 9 10 if __name__ == '__main__': 11 p = MyProcess('www.baidu.com') 12 p.start()
3.process的用法
p.start() 调用系统,启动子进程
p.terminate() 终止当前进程
p.daemon() 守护进程
5.join函数
join函数的作用是提高优先级,使父进程等待子进程结束
from multiprocessing import Process import time def task(num): print('这是%s号进程' % num) time.sleep(2) if __name__ == '__main__': start_time = time.time() ps = [] for i in range(5): p = Process(target=task,args=(i,)) p.start() ps.append(p) for p in ps: p.join() print(time.time() - start_time) print('over')
6.孤儿进程与僵尸进程
孤儿进程
孤儿进程是指父进程已经终止,但是子进程还在运行
孤儿进程是无害的,会总动过继给操作系统,由操作系统进行资源回收
僵尸进程
僵尸进程是指子进程执行完成所有任务,已经终止.但是还残留一些信息(进程ID 进程名称)
父进程没有去处理这些残留信息,导致残留信息会占用系统资源,
僵尸进程是有害的
当出现大量的僵尸进程时 会占用系统资源 可以把它父进程杀掉 僵尸就成了孤儿 操作系统会
负责回收数据
1 import time 2 from multiprocessing import Process 3 4 def task1(): 5 print("子进程 run") 6 7 if __name__ == '__main__': 8 for i in range(10): 9 p = Process(target=task1) 10 p.start() 11 12 time.sleep(100000) 13 14 # 可以通过cmd 命令窗口使用taskkill + 进程ID的方式结束父进程 15 # 也可以通过任务管理器结束父进程