首页 > 其他分享 >【FastAPI】异步+网络请求

【FastAPI】异步+网络请求

时间:2024-10-17 20:12:34浏览次数:6  
标签:__ 异步 请求 FastAPI app await import data conn

  • 前言:当我们碰到IO阻塞的时,使用fastapi异步框架,需要配合异步模块使用
  • 1.网络请求,httpx
import httpx
import uvicorn
from fastapi import FastAPI
from fastapi.requests import Request

app = FastAPI()

@app.get("/api")
async def api(request: Request):
    data_dict = await request.json()
    print(data_dict)

    async with httpx.AsyncClient(proxies={}, cookies={}, headers={}) as client:
        res = await client.get(
            url="https://movie.douban.com/j/search_subjects?type=movie&tag=%E7%83%AD%E9%97%A8&sort=recommend&page_limit=20&page_start=20",
            params={},
            cookies={},
            headers={
                "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36"
            }
        )
        douban_dict = res.json()

    print(douban_dict)
    return {"data": "ok"}


if __name__ == '__main__':
    uvicorn.run(app, host="127.0.0.1", port=9001)
  • 2.数据库相关,注:一般不需要,正常查询速度够用,即使慢也是因为慢SQL导致
    • 2.1:Redis,pip3 install aioredis
import httpx
import uvicorn
from fastapi import FastAPI
from fastapi.requests import Request
import aioredis

app = FastAPI()

@app.get("/api")
async def api(request: Request):
    data_dict = await request.json()
    print(data_dict)

    #conn = await aioredis.Redis(host="127.0.0.1", port=6379, password="123456")
    #await conn.set("k1", "v1")
    #value = await conn.get("k1")
    #print(value)
    #await conn.close()

    async with aioredis.Redis(host="127.0.0.1", port=6379, password="123456") as conn:
        await conn.set("k1", "v1")
        value = await conn.get("k1")
        print(value)

    return {"data": "ok"}

if __name__ == '__main__':
    uvicorn.run(app, host="127.0.0.1", port=9001)
  • 2.2:mysql,pip install aiomysql
import uvicorn
from fastapi import FastAPI
from fastapi.requests import Request
import aiomysql

app = FastAPI()

@app.get("/api")
async def api(request: Request):
    data_dict = await request.json()
    print(data_dict)

    async with aiomysql.connect(host='127.0.0.1', port=3306, user='root', password='123456', db='mysql') as conn:
        cur = await conn.cursor()
        await cur.execute("SELECT Host,User FROM user")
        result = await cur.fetchall()
        print(result)

    return {"data": "ok"}


if __name__ == '__main__':
    uvicorn.run(app, host="127.0.0.1", port=9001)

标签:__,异步,请求,FastAPI,app,await,import,data,conn
From: https://www.cnblogs.com/xwltest/p/18472975

相关文章

  • 【FastAPI】jinja2模板
    本文介绍简单的jinja2语法APIimportuvicornfromfastapiimportFastAPIfromfastapi.requestsimportRequestfromfastapi.templatingimportJinja2Templatesfromfastapi.staticfilesimportStaticFilesapp=FastAPI()#项目根目录下创建static与templates文件......
  • IO、进程/线程、同步/异步、阻塞/非阻塞
    IO(Input/Output)IO在计算机中指Input/Output,也就是输入和输出。由于程序和运行时数据是在内存中驻留,由CPU这个超快的计算核心来执行,涉及到数据交换的地方,通常是磁盘、网络等,就需要IO接口。比如你打开浏览器,访问新浪首页,浏览器这个程序就需要通过网络IO获取新浪的网页。浏览器首......
  • 如何用axios发送ajax请求(函数)
    在上篇文章的基础上将格式改为:btns[2].onclick=function(){axios({//请求方法method:'POST',url:'/axios-server',params:{vip:10,......
  • 【FastAPI】入门基础
    FastAPI介绍和安装FastAPI是一个基于Python3.6+版本的异步WEB应用框架,使用Python类型注解构建webAPI。它的主要特点如下:高性能:与NodeJS和Go相当。编码快:将开发功能的速度提高2~3倍。Bug少:减少大约40%的由开发人员导致的错误。直观:强大的编辑器支持......
  • 1-3.Retrofit 异常请求清单(404 请求、超时请求、连接失败请求)
    Retrofit1、Retrofit概述Retrofit是一个网络请求库,专门用于发送HTTP请求和处理HTTP响应2、Retrofit引入在AndroidManifest.xml文件中添加相关权限,如果是Android6.0(API级别23)或之后,需要在运行时请求<uses-permissionandroid:name="android.permission.INT......
  • 【Azure 环境】请求经过应用程序网关,当响应内容大时遇见504超时报错
    问题描述API调用过程中,一旦遇到数据量大的场景下,返回504 超时的错误。注意: 请求首先达到ApplicationGateway,然后转发到后端的AppService服务中。 问题解答这可能与应用程序网关的“响应缓存区”配置有关:应用程序网关的响应缓冲区可以收集后端服务器发送的全部或部分......
  • RESTful API常用的HTTP请求方法
    RESTfulAPI常用的HTTP请求方法1.GET获取资源在RESTfulAPI中,一般用来获取数据,例如列表,详情等。对应CRUD中的R,即查找操作。请求参数通常在URL中传递(如查询字符串)。2.POST用途:创建新资源。特点:可以提交数据到服务器进行处理,通常会改变服务器的状态或数据。例如提交表单信息......
  • AJAX——HTTP 协议请求报文和响应报文结构
    1、HTTP(hypertexttransportprotocol)协议【超文本传输协议】,协议详细规定了浏览器和万维网服务器之间互相通信的规则。2、请求报文(浏览器向服务器发送的内容)重点是格式和参数        ①请求行             请求类型+/+url文件(页面路径/查询......
  • Go语言中http.Transport的RoundTrip方法请求过滤与拦截技巧与应用
    go语言中http.transport的请求过滤与拦截技巧与应用1.引言在Go语言的http包中,http.Transport作为底层的HTTP传输层实现,提供了强大的功能,可以用于发起HTTP请求。本文将重点介绍如何使用http.Transport实现请求过滤和拦截的技巧及其应用。2.请求过滤2.1过滤请求方法我们可以使用h......
  • 异步服务器编写过程
    boost::asio::io_context的作用boost::asio::io_context是Boost.Asio库中的一个核心组件,主要用于管理异步事件和任务的执行。它在网络编程、并发编程和异步操作中发挥着重要作用。主要作用事件循环:io_context提供了一个事件循环,可以调度和处理异步操作。当有事件发......