异步编程:进程池、线程池、协程。一栏搞定。
文章平均质量分 93
进程池、线程池、协程,一栏搞定,看不明白直接文章下方评论,我会回复。记录进程池、线程池、协程的学习总结,相信会对你有效,有编程模板,有网上的案例,也有遇到问题的解决方法,也有一些自己的想法,总之,这个专栏彻底把这三个搞明白。欢迎点击关注此专栏。
Tony Einstein
人生苦短,我用Python。记录生活,记录成长,天道酬勤,佛系更新。
做一个会思考、会解决问题的思考者!希望得到你的关注、点赞、收藏!
展开
-
Python多线程和多进程:初步了解
计算机有5大基本组成部分,运算器,控制器,存储器,输入和输出。运算器和控制器封装到一起,加上寄存器组和cpu内部总线构成中央处理器(CPU)。cpu的根本任务,就是执行指令,对计算机来说,都是0,1组成的序列,cpu从逻辑上可以划分为3个模块:控制单元、运算单元和存储单元。这三个部分由cpu总线连接起来。CPU的运行原理就是:控制单元在时序脉冲的作用下,将指令计数器里所指向的指令地址(这个地址是在内存里的)送到地址总线上去,然后CPU将这个地址里的指令读到指令寄存器进行译码。原创 2022-11-13 22:25:42 · 1246 阅读 · 0 评论 -
4.3 协程:gevent实现协程
libevent 是一个事件分发引擎,greenlet 提供了轻量级线程的支持,gevent 就是基于这两个的一个专门处理网络逻辑的并行库。原理:程序的重要部分是将任务函数封装到 gevent.spawn。greenlet、Eventlet,gevent ( 推荐 )原创 2022-12-25 19:53:40 · 419 阅读 · 0 评论 -
4.2 协程:asyncio实现协程
注意:所谓的回调函数,就是指协程函数coroutine执行结束时候会调用回调函数。并通过参数future获取协程执行的结果。我们创建的task和回调里的future对象,实际上是同一个对象,因为task是future的子类。原创 2022-12-25 19:38:24 · 977 阅读 · 0 评论 -
4.1 协程:协程基础
协程,又称微线程。协程是python个中另外一种实现多任务的方式,只不过比线程更小占用更小执行单元(理解为需要的资源)。为啥说它是一个执行单元,因为它自带CPU上下文。这样只要在合适的时机, 我们可以把一个协程 切换到另一个协程。只要这个过程中保存或恢复 CPU上下文那么程序还是可以运行的。通俗的理解:在一个线程中的某个函数,可以在任何地方保存当前函数的一些临时变量等信息,然后切换到另外一个函数中执行,注意不是通过调用函数的方式做到的,并且切换的次数以及什么时候再切换到原来的函数都由开发者自己确定。原创 2022-12-25 19:07:49 · 3588 阅读 · 0 评论 -
2.3 多线程:threading实现多线程
多线程与多进程的应用场景不一样:线程的创建开销小、由于GIL的存在,无法真正并行,适合GUI、网络通信、文件读写等IO密集型场景;进程的创建开销大,可以充分利用多个CPU实现并行,适合计算量比较大(比如单个函数执行需要几分钟、几十分钟以上),且无需IO(简单地说就是数据已经在内存中,不需要读取磁盘、不需要网络通信)的场景。多线程、多进程都不适合的场景:基本不涉及IO或只读取一次文件这种,且计算量不大,单线程短时间就能结束(一两秒左右)的情况下,单进程单线程是最好的。原创 2022-12-12 00:34:49 · 334 阅读 · 0 评论 -
2.2 多线程:concurrent.futures实现线程池
submit: 提交一个任务执行,并返回 Future 对象。通过 Future 对象的result()方法可以获得返回结果。如果没有返回结果,则为 None。map: 提交多个任务执行,返回结果列表。原创 2022-12-12 00:29:47 · 1042 阅读 · 2 评论 -
2.1 多线程:锁机制
是提高效率的一种有效方式,但是由于 CPython 解释器中存在 GIL 锁,因此 CPython 中的多线程只能使用单核。也就是说 Python 的多线程是宏观的多线程,而微观上实际依旧是单线程。原创 2022-12-11 22:45:17 · 588 阅读 · 0 评论 -
3.2. 多进程:concurrent.futures实现进程池
异步的线程/进程池,concurrent.futures模块: 一次起指定数量的线程数,提交的任务在这些线程中跑,当线程中的任务执行完毕时,线程不会结束,而是保留资源,再次提交新的任务时在空闲的线程中跑新任务,而不会另起线程;优点是避免反复申请资源。原创 2022-12-11 21:45:53 · 1027 阅读 · 0 评论 -
3.1 多进程:进程间通信
多进程之间不共享数据,但共享同一套文件系统,像访问同一个文件、同一终端打印,如果不进行同步操作,就会出现错乱的现象。所有在 threading 存在的同步方式,multiprocessing 中都有类似的等价物,如:锁(lock,RLock)、信号量Semaphore,Event(事件)Condition,Barrier等。原创 2022-12-05 23:05:42 · 1801 阅读 · 0 评论 -
1.2 异步相关概念:深入了解
I/O密集型(I/O bound) 是指不会特别消耗 CPU 资源,但是I/O比较频繁的任务和操作,比如文件的读写、网络通信、数据库访问等等。CPU密集型(CPU bound)是指需要大量耗费CPU资源的任务和操作,比如计算、解压缩、加密解密等等。原创 2022-12-05 22:53:40 · 442 阅读 · 0 评论 -
1.1 异步相关概念:初步了解
并发与并行的区别: - 并发不是同时发生,并行是同时发生。 并发是逻辑上的同时发生(simultaneous),而并行是物理上的同时发生。 - 并发是指一个处理器同时处理多个任务。并行是指多个处理器或者是多核的处理器同时处理多个不同的任务。 - 并发是在同一个cpu上同时(不是真正的同时,而是看来是同时,因为CPU要在多个程序之间切换)运行多个程序。 - 并行是每一个CPU运行一个程序。原创 2022-12-05 22:41:42 · 753 阅读 · 0 评论