异步编程 *************************************** 独立开发 ============================ 视频 ------------------------------ `【python】asyncio的理解与入门,搞不明白协程?看这个视频就够了。 `_ 文字 ----------------------------- 知乎: https://zhuanlan.zhihu.com/p/720011200/edit ppt ------------------------ `playground `_ 协程入门 ============================= .. tabs:: .. tab:: go Goroutines: 有专门的调度器管理Goroutines的执行,结合了协程的轻量级特性和线程的能力,既支持协作式也支持抢占式的调度。 .. tabs:: .. tab:: 基础 .. literalinclude:: goroutine/basic/main.go :language: go .. tab:: 等待所有协程完成任务 .. literalinclude:: goroutine/waitgroup/main.go :language: go .. tab:: 并发任务并收集结果 .. literalinclude:: goroutine/case/main.go :language: go .. tab:: python Coroutines: 依赖于程序内部的任务主动让出控制权(yield), 而不是由操作系统强制调度 由于不需要像线程那样进行上下文切换,协程可以非常轻量,一个进程可以同时运行成千上万个协程。 .. tabs:: .. tab:: 基础(同步) `协程函数定义 `_ .. literalinclude:: goroutine/basic/main.py :language: python .. tab:: 基础(异步) .. literalinclude:: goroutine/basic/amain.py :language: python .. tab:: 并发运行多个协程 .. literalinclude:: goroutine/basic/concurrently.py :language: python asyncio综合案例 ============================================================== aiohttp + redis + mysql .. tabs:: .. tab:: main.py .. literalinclude:: asyncio/main.py .. tab:: 单元测试 https://pypi.org/project/pytest-asyncio/ .. literalinclude:: asyncio/main_test.py goroutine池 ============================================================== 借助第三方库 `ants `_ 帮忙管理go协程 .. literalinclude:: /../../Go/coding/go/ants/main.go 有点像python的基于多线程的异步模式