Python中的并行和并发是什么并行和并发
无论是并行还是并发,在用户看来都是'同时'运行的,不管是进程还是线程,都只是一个任务而已 , 真是干活的是cpu , cpu来做这些任务,而一个cpu同一时刻只能执行一个任务 。
并发是伪并行,即看起来是同时运行 。单个cpu 多道技术就可以实现并发,(并行也属于并发),简单的可以理解为快速在多个线程来回切换,感觉好像同时在做多个事情 。
只有具备多个cpu才能实现并行,单核下 , 可以利用多道技术,多个核,每个核也都可以利用多道技术(多道技术是针对单核而言的) 。有四个核,六个任务,这样同一时间有四个任务被执行,假设分别被分配给了cpu1 , cpu2,cpu3,cpu4,一旦任务1遇到I/O就被迫中断执行,此时任务5就拿到cpu1的时间片去执行,这就是单核下的多道技术 ,而一旦任务1的I/O结束了,操作系统会重新调用它(需知进程的调度、分配给哪个cpu运行,由操作系统说了算),可能被分配给四个cpu中的任意一个去执行 。
相关推荐:《Python视频教程》
多道技术:内存中同时存入多道(多个)程序 , cpu从一个进程快速切换到另外一个 , 使每个进程各自运行几十或几百毫秒 , 这样,虽然在某一个瞬间 , 一个cpu只能执行一个任务,但在1秒内,cpu却可以运行多个进程,这就给人产生了并行的错觉 , 即伪并发,以此来区分多处理器操作系统的真正硬件并行(多个cpu共享同一个物理内存) 。
同步执行:一个进程在执行某个任务时,另外一个进程必须等待其执行完毕 , 才能继续执行 。
异步执行:一个进程在执行某个任务时,另外一个进程无需等待其执行完毕,就可以继续执行,当有消息返回时 , 系统会通知后者进行处理,这样可以提高执行效率 。
举个例子,打电话时就是同步通信,发短息时就是异步通信 。
相关推荐:
Python如何实现线程间同步
python高并发怎么解决某个时间段内,数据涌来,这就是并发 。如果数据量很大,就是高并发
高并发的解决方法:
1、队列、缓冲区
假设只有一个窗口,陆续涌入食堂的人,排队打菜是比较好的方式
【python函数并发 python并发post请求】所以,排队(队列)是一种天然解决并发的办法
排队就是把人排成 队列,先进先出 , 解决了资源使用的问题
排成的队列,其实就是一个缓冲地带,就是 缓冲区
假设女生优先,每次都从这个队伍中优先选出女生出来先打饭,这就是 优先队列
例如queue模块的类Queue、LifoQueue、PriorityQueue(小顶堆实现)
2、争抢
只开一个窗口 , 有可能没有秩序,也就是谁挤进去就给谁打饭
挤到窗口的人占据窗口,直到打到饭菜离开
其他人继续争抢,会有一个人占据着窗口 , 可以视为锁定窗口,窗口就不能为其他人提供服务了 。
这是一种锁机制
谁抢到资源就上锁,排他性的锁,其他人只能等候
争抢也是一种高并发解决方案,但是,这样可能不好,因为有可能有人很长时间抢不到
3、预处理
如果排长队的原因,是由于每个人打菜等候时间长,因为要吃的菜没有,需要现做 , 没打着饭不走开,锁定着窗口
食堂可以提前统计大多数人最爱吃的菜品,将最爱吃的80%的热门菜,提前做好,保证供应 , 20%的冷门菜,现做
这样大多数人,就算锁定窗口,也很快打到饭菜走了,快速释放窗口
一种提前加载用户需要的数据的思路,预处理 思想,缓存常用
更多Python知识 , 请关注:Python自学网?。?
python并发编程-进程池在利用Python进行系统管理的时候,特别是同时操作多个文件目录,或者远程控制多台主机,并行操作可以节约大量的时间 。多进程是实现并发的手段之一,需要注意的问题是:
例如当被操作对象数目不大时,可以直接利用multiprocessing中的Process动态成生多个进程 , 十几个还好 , 但如果是上百个,上千个 。。。手动的去限制进程数量却又太过繁琐,此时可以发挥进程池的功效 。
我们就可以通过维护一个进程池来控制进程数目,比如httpd的进程模式,规定最小进程数和最大进程数..
ps: 对于远程过程调用的高级应用程序而言 , 应该使用进程池 , Pool可以提供指定数量的进程 , 供用户调用,当有新的请求提交到pool中时 , 如果池还没有满,那么就会创建一个新的进程用来执行该请求;但如果池中的进程数已经达到规定最大值,那么该请求就会等待,直到池中有进程结束,就重用进程池中的进程 。
创建进程池的类:如果指定numprocess为3 , 则进程池会从无到有创建三个进程 , 然后自始至终使用这三个进程去执行所有任务,不会开启其他进程
参数介绍:
方法介绍:
主要方法:
其他方法(了解部分)
应用:
发现:并发开启多个客户端,服务端同一时间只有3个不同的pid,干掉一个客户端,另外一个客户端才会进来 , 被3个进程之一处理
回调函数:
需要回调函数的场景:进程池中任何一个任务一旦处理完了,就立即告知主进程:我好了额,你可以处理我的结果了 。主进程则调用一个函数去处理该结果,该函数即回调函数
我们可以把耗时间(阻塞)的任务放到进程池中,然后指定回调函数(主进程负责执行),这样主进程在执行回调函数时就省去了I/O的过程,直接拿到的是任务的结果 。
如果在主进程中等待进程池中所有任务都执行完毕后 , 再统一处理结果 , 则无需回调函数
python函数并发的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于python并发post请求、python函数并发的信息别忘了在本站进行查找喔 。
推荐阅读
- 鸿蒙官方开发语言,鸿蒙os开发语言
- oracle优化sql语句执行效率,oracle 性能优化之sql语句优化
- 游戏小丑模拟器视频,小丑模组下载
- vb.net设置变量 vbnet raiseevent
- gis电力电缆论文的简单介绍
- excel怎么运行宏,excel表格运行宏
- pg独角兽灯光安装,pg独角兽装灯还要贴贴纸吗
- go语言云 go语言云盘开发
- sap系统开发老师,sap开发工程师是做什么的