Python async, await 的理解与使用

关于 Python 中 async, await 关键字的一些知识在去年的一篇 探索 Flask 对 asyncio 的支持 有讲到,一直没在实际上用过它们,所以基本上也就忘干净了。随着 Flask 2 加入了 async 的特性,以及 FastAPI 从一开始支持 async, 又觉得有必要重新温习一下 Python 中如何使用 async, await 关键字了。

注:由于 Flask 支持了 async, 号称 async 化 Flask 的 Quart 项目开始变得无足轻重了。

本文主要的学习材料是在 YouTube 上的一个视频 Fear and Awaiting in Async (Screencast) , 其中用 Python REPL 以 Live 的形式展示,对 async, await 关键字循序渐进的讲解。

如今不少语言都支持 async, await 关键字,如 C#, JavaScript, Kotlin, Rust 等,还有今天的主角 Python。而 Java 仍然很重视函数返回值的意义,未支持 async, 只能显式的返回 Future/CompletableFuture, 而且自己控制如何在线程池中执行。

这又来到了一个叫做纤程的概念,它隐藏在 Python 的 async, await 背后,Go 语言对纤程的支持就更简单了, go foo() 就是了。

async 关键字的函数

>>> def greeting(name):
... return 'Hello ' + name
...
>>> greeting('Blog')
Hello Blog

>>> def greeting ( name ) :

. . . return 'Hello ' + name

. . .

>>> greeting ( 'Blog' )

Hello Blog

调用后,函数立即执行

对于一个普通的没有 async 关键字的函数,调用它直接得到它的返回值,如果给它加上 async 关键字会怎么样呢?

>>> async def greeting(name):
...     print('called gretting function')
...     return 'Hello ' + name
...
>>> greeting('Blog')

>>> async def greeting ( name ) :

. . .      print ( 'called gretting function' )

. . .      return 'Hello ' + name

. . .

>>> greeting ( 'Blog' )

< coroutine object greeting at 0x10dc8ece0 >

得到的是一个 coroutine 对象

你可能感兴趣的:(python,开发语言,后端,程序人生,数据分析)