zoukankan      html  css  js  c++  java
  • FastAPI(63)- Concurrency and async / await 并发、异步/等待

    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 创建的那些将在外部线程池上调用,而不是被“等待”

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

  • 相关阅读:
    PAT 甲级 1132 Cut Integer (20 分)
    AcWing 7.混合背包问题
    AcWing 9. 分组背包问题
    AcWing 5. 多重背包问题 II
    AcWing 3. 完全背包问题
    AcWing 4. 多重背包问题
    AcWing 2. 01背包问题
    AcWing 875. 快速幂
    AcWing 874. 筛法求欧拉函数
    AcWing 873. 欧拉函数
  • 原文地址:https://www.cnblogs.com/poloyy/p/15384065.html
Copyright © 2011-2022 走看看