ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

FastAPI(63)- Concurrency and async / await 并发、异步/等待

2021-10-09 09:35:29  阅读:308  来源: 互联网

标签:依赖 函数 FastAPI await results 63 async def


await

如果使用的第三方库说明调用它们要通过 await

results = await some_library()

 

声明路径操作函数

@app.get('/')

async def read_results():

    results = await some_library()
    return results

await 只能在 async def 函数中使用

 

注意

  • 如果正在使用与某些内容(数据库、API、文件系统等)通信的第三方库,并且不支持 await, (目前大多数数据库库都是这种情况)
  • 路径操作需要声明为普通函数 def,例如
@app.get('/')

def results():

    results = some_library()
    return results 
  • 如果应用程序(以某种方式)不必与其他任何东西通信并等待它响应,可以使用 async def(就是异步函数啦)
  • 如果不知道的话,使用普通 def
  • 可以根据需要在路径操作函数中混合使用 def 和 async def
  • 无论如何,在上述任何一种情况下,FastAPI 仍然会异步工作并且非常快
  • 但是按照上面的步骤,它将能够做一些性能优化

 

路径操作函数

当使用普通 def 而不是 async def 声明路径操作函数时,它在一个外部线程池中运行,然后等待,而不是直接调用(因为它会阻塞服务器)

 

依赖关系

  • 这同样适用于依赖项
  • 如果依赖项是标准 def 函数而不是 async def,则它在外部线程池中运行

 

子依赖

  • 可以有多个相互依赖的依赖项和子依赖项(作为函数定义的参数)
  • 其中一些可能是用 async def 创建的,有些可能是用普通 def 创建的
  • 使用普通 def 创建的那些将在外部线程池上调用,而不是被“等待”

 

比较概念性的东西,还是等实际使用时再补充代码栗子吧

标签:依赖,函数,FastAPI,await,results,63,async,def
来源: https://www.cnblogs.com/poloyy/p/15384065.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有