fastapi python 并发_FastAPI 异步代码、并发和并行

作者:麦克煎蛋   出处:https://www.cnblogs.com/mazhiyong/ 转载请保留这段声明,谢谢!

我们这里探讨下关于异步代码、并行和并发的一些概念。

一、初探

1、如果我们使用必须用await调用的第三方库,例如:

results = await some_library()

那么我们就要用async def来定义路径操作函数:

@app.get('/')

asyncdefread_results():

results=await some_library()return results

注意:我们在基于async def定义的函数内部才能使用await。

2、如果第三方库不支持使用await,那么我们就用def定义路径操作函数即可。

@app.get('/')defresults():

results=some_library()return results

3、如果我们的应用不需要与第三方通讯,那么就用async def来定义路径操作函数。

4、如果我们不知道怎么做,那么就用def来定义路径操作函数。

无论上述哪种情况,FastAPI都会执行异步工作并且速度极快。

但如果我们遵循一些操作规范,将会带来一些性能上的优化。

现代版本的Python通过使用"协程"来实现对"异步代码"的支持,在语法上表现为async和await的使用。

我们以下重点讲述的内容为:

异步代码

async 和 await

协程

二、异步代码

异步代码通常表示,开发语言有一种方式用来通知计算机(应用)在代码的某个地方,必须等待某些事件在其他地方完成。

这里的某些事件我们称之为"slow-file"。在等待"slow-file"完成的这个时间段内,计算机可以执行一些别的任务。

然后计算机(应用)一旦有机会就会返回,比如它需要再次等待,或者它完成了在这个地方的所有其他任务。

接下来会检查所有等待的任务是否已经完成,或者继续执行应当要完成的任务。

然后它会从等待任务中取走第一个任务继续执行。

这里等待的某些事件通常指的是,相对程序计算或者内存操作比较耗时的I/O操作,例如

网络通讯

硬盘文件读写

远程 API 操作

数据库操作

其他耗时操作

之所以被称为"异步"是因为计算机(应用)没必要为了"同步"等待"slow-file"完成而什么事情都不做,那样的话只能等待取到任务结果后才能继续工作。

实际上,作为一个异步系统,一旦某些事件完成,这个事件会等待一会以便计算机(应用)返回获取结果,然后利用执行结果继续工作。

对于同步系统来说,通常也称之为"顺序模型",因为在切换执行一个不同任务的时候,计算机(应用)严格遵循序列中的

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值