python干货|python多进程并发
python多进程并发基本知识
(1)python多线程的限制
python多线程有个讨厌的限制,全局解释器锁(global interpreter lock),这个锁的意思是任一时间只能有一个线程使用解释器,跟单cpu跑多个程序一个意思,大家都是轮着用的,这叫“并发”,不是“并行”。手册上的解释是为了保证对象模型的正确性!这个锁造成的困扰是如果有一个计算密集型的线程占着cpu,其他的线程都得等着....,试想你的多个线程中有这么一个线程,得多悲剧,多线程生生被搞成串行;当然这个模块也不是毫无用处,手册上又说了:当用于IO密集型任务时,IO期间线程会释放解释器,这样别的线程就有机会使用解释器了!所以是否使用这个模块需要考虑面对的任务类型。
(2)并发与并行
无论是并行还是并发,在用户看来都是'同时'运行的,不管是进程还是线程,都只是一个任务而已,真是干活的是cpu,cpu来做这些任务,而一个cpu同一时刻只能执行一个任务
1) 并发:是伪并行,即看起来是同时运行。单个cpu+多道技术就可以实现并发,(并行也属于并发)
2) 并行:同时运行,只有具备多个cpu才能实现并行
(3)由于要做把一个多线程改成多进程,看一下相关方面的东西,总结一下,主要是以下几个相关的标准库
1. subprocess
2. signal
3. threading
4. multiprocessing
multiprocessing模块介绍
(1)简介:像线程一样管理进程,这个是mutilprocess的核心,他与threading很是相像,对多核CPU的利用率会比threading好的多。
(2)简单的创建进程
(3)确定当前的进程,即是给进程命名,方便标识区分,跟踪
(4)守护进程:守护进程就是不阻挡主程序退出,自己干自己的 mutilprocess.setDaemon(True)就这句等待守护进程退出,要加上join,join可以传入浮点数值,等待n久就不等了
(5)终止进程:最好使用 poison pill,强制的使用terminate()注意 terminate之后要join,使其可以更新状态
Process类的使用
(1)注意:在windows中Process()必须放到# if __name__ == '__main__':下
(2)创建并开启子进程的两种方式
Python中单线程、多线程和多进程的效率对比
(1)引入所需要的模块
(2)定义CPU密集的计算函数
(3)定义IO密集的文件读写函数
(4) 定义网络请求函数
(5)测试线性执行IO密集操作、CPU密集操作所需时间、网络请求密集型操作所需时间
(6)测试多线程并发执行CPU密集操作所需时间
(7)测试多线程并发执行IO密集操作所需时间
(8)测试多线程并发执行网络密集操作所需时间
(9)测试多进程并发执行CPU密集操作所需时间
(10)测试多进程并发执行IO密集型操作
(11)测试多进程并发执行Http请求密集型操作
(12)实验结果
最后
前几天有私信小编要Python的学习资料,小编整理了一些有深度的Python教程和参考资料,从入门到高级的都有,文件已经打包好了,正在学习Python的同学可以下载学习学习。文件下载方式:点击小编头像,关注后私信回复“python”即可下载。首先把代码撸起来!首先把代码撸起来!首先把代码撸起来!重要的事说三遍,哈哈。“编程是门手艺活”。什么意思?得练啊。