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

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

  • 相关阅读:
    Java虚拟机详解(二)------运行时内存结构
    Java虚拟机详解(一)------简介
    分布式任务调度平台XXL-JOB搭建教程
    Kafka 详解(三)------Producer生产者
    服务器监控异常重启服务并发送邮件
    超详细的Linux查找大文件和查找大目录技巧
    linux清理磁盘空间
    Magent实现Memcached集群
    Nginx反爬虫: 禁止某些User Agent抓取网站
    redis集群搭建详细过程
  • 原文地址:https://www.cnblogs.com/poloyy/p/15384065.html
Copyright © 2020-2023  润新知