异步编程
***************************************
独立开发
============================
视频
------------------------------
`【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的基于多线程的异步模式