Slide 1

Slide 1 text

现代⽅方式使⽤用asyncio Kevin

Slide 2

Slide 2 text

No content

Slide 3

Slide 3 text

asyncio • 为什什么我们需要异步? • 为什什么选择asyncio? • 如何优雅的编写asyncio程序? • asyncio的其他

Slide 4

Slide 4 text

asyncio • 为什什么我们需要异步? • 为什什么选择asyncio? • 如何优雅的编写asyncio程序? • asyncio的其他

Slide 5

Slide 5 text

asyncio • 为什什么我们需要异步? • 为什什么选择asyncio? • 如何优雅的编写asyncio程序? • asyncio的其他

Slide 6

Slide 6 text

gevent/eventlet

Slide 7

Slide 7 text

gevent/eventlet

Slide 8

Slide 8 text

相⽐比gevent • 官⽅方⽀支持,未来的⽅方向 • 显式切换 • 显式处理理条件竞争问题更更容易易 • 显式控制上下⽂文切换,不不再踩坑 • 更更容易易兼容

Slide 9

Slide 9 text

asyncio • 为什什么我们需要异步? • 为什什么选择asyncio? • 如何优雅的编写asyncio程序? • asyncio的其他

Slide 10

Slide 10 text

举个例例⼦子

Slide 11

Slide 11 text

举个例例⼦子

Slide 12

Slide 12 text

举个例例⼦子

Slide 13

Slide 13 text

run&serve_forever

Slide 14

Slide 14 text

asyncio API

Slide 15

Slide 15 text

asyncio API • 优先使⽤用⾼高级API,提供更更简单的使⽤用⽅方法 • 只有在需要时,才选择使⽤用底层API

Slide 16

Slide 16 text

再举个例例⼦子

Slide 17

Slide 17 text

gather

Slide 18

Slide 18 text

contextvar

Slide 19

Slide 19 text

contextvar

Slide 20

Slide 20 text

async传染

Slide 21

Slide 21 text

async传染

Slide 22

Slide 22 text

async传染

Slide 23

Slide 23 text

async传染

Slide 24

Slide 24 text

Django Channels

Slide 25

Slide 25 text

flask

Slide 26

Slide 26 text

responder

Slide 27

Slide 27 text

asyncio调试 https://docs.python.org/3/library/asyncio-dev.html#debug-mode

Slide 28

Slide 28 text

aiomonitor

Slide 29

Slide 29 text

aiomonitor

Slide 30

Slide 30 text

asyncio • 为什什么我们需要异步? • 为什什么选择asyncio? • 如何优雅的编写asyncio程序? • asyncio的其他

Slide 31

Slide 31 text

其他:优化 • uvloop • 新版本也是⼀一种优化:

Slide 32

Slide 32 text

其他:注意事项 • 单独使⽤用asyncio仍旧是单线程模型 • 只有IO才可以并发 • asyncio会带来CPU压⼒力力 • event loop和上下⽂文切换在⾼高并发场景下仍旧有明显消耗

Slide 33

Slide 33 text

Thank You!