当前位置: 首页 > news >正文

做著名建筑物网站简介新开传奇网站

做著名建筑物网站简介,新开传奇网站,怎么做网站加载动画,地方同城网站开发Python WEB框架FastAPI (二) 最近一直在使用fastapi,随着使用的深入发现我对于它的了解还是太少了,以至于踩了一些坑。所以在这里记录一下,愿看到的小伙伴不迷路。 路径传参并发问题 一、路径传参 这是对上一个传参…

Python WEB框架FastAPI (二)


最近一直在使用fastapi,随着使用的深入发现我对于它的了解还是太少了,以至于踩了一些坑。所以在这里记录一下,愿看到的小伙伴不迷路。

  • 路径传参
  • 并发问题

一、路径传参

这是对上一个传参知识的补充,除了通过request对象传参以及参数名传参,还可以通过请求路径传参。这也是开发中常用的传参方式,请看以下代码:

@app.get("/test/{id}")
def test(id):print(f"收到请求!{id}")return id

代码就不用解释了吧。相信各位都能看懂。

二、并发问题

这个部分是我今天要聊的一个重点,确实花了一些时间。

1、async关键字会导致请求阻塞

当方法添加了async关键字时,请求将被串行,后进的请求会等待前一项请求结束才能够进方法。

@app.get("/test3")
async def test():now_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")print(now_time, "/test3")time.sleep(10)return "OK"

浏览器开启两个tag访问/test3,后台只会打印一个/test3,另一个10s中之后才会被打印出来。
在这里插入图片描述

2、不使用async,相同的请求会被阻塞

如果两个请求完全相同,则会阻塞等待前一个请求结束。

@app.get("/test4")
def test(request: Request):now_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")print(now_time, request.url)time.sleep(10)return "OK"

浏览器开两个tag,访问 /test4,第二个请求会在 10s后进入,跟async使用时效果相同。
在这里插入图片描述
分别用edge和chrome访问 /test,两个请求则会同时进入。
在这里插入图片描述
另外如果是同一浏览器请求,但是携带的参数不同,结果也会同时进入:
在这里插入图片描述
综上,如果要实现并发,去掉async关键字即可,完全一样的请求会被阻塞,个人认为也是正常的,也能够防止恶意攻击。

3、使用线程池控制并发量

创建全局线程池,并发量为2

# 创建全局线程池
thread_pool = ThreadPoolExecutor(max_workers=2)def long_running_task(id):print(f"{id} 开始执行!")time.sleep(10)return "OK"@app.get("/test/{id}")
def test(request: Request, id):print(f"{id} 请求进入!")future = thread_pool.submit(long_running_task, id)# 等待任务结束res = future.result()return res

当四个请求同时访问,请求会同时进入,但是只会同时处理两个请求:
在这里插入图片描述

以上便是本次的一个学习笔记,欢迎大家留言探讨!
最后奉上完整的测试源码:

import time
from argparse import ArgumentParser
from concurrent.futures import ThreadPoolExecutor
from datetime import datetimeimport uvicorn
from fastapi import FastAPI, Requestapp = FastAPI()# 创建全局线程池
thread_pool = ThreadPoolExecutor(max_workers=2)def long_running_task(id):print(f"{id} 开始执行!")time.sleep(10)return "OK"@app.get("/test/{id}")
def test(request: Request, id):print(f"{id} 请求进入!")future = thread_pool.submit(long_running_task, id)# 等待任务结束res = future.result()return res@app.get("/test3")
async def test():now_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")print(now_time, "/test3")time.sleep(10)return "OK"@app.get("/test4")
def test(request: Request):now_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")print(now_time, request.url)time.sleep(10)return "OK"if __name__ == "__main__":# 创建解析器parser = ArgumentParser()# 添加命令行参数parser.add_argument('--host', default="0.0.0.0", type=str, help='Server bound address')parser.add_argument('--port', default=8000, type=int, help='Port number')# 解析命令行参数args = parser.parse_args()# 启动服务器uvicorn.run(app=app, host=args.host, port=args.port)
http://www.mnyf.cn/news/41694.html

相关文章:

  • 黄石做网站联系合肥网站快速优化排名
  • w做网站诈骗谷歌搜索引擎免费
  • 济南it培训机构搜索引擎优化的各种方法
  • 网站建设PHP开发是什么意思东莞seo靠谱
  • 建站方案书广州关键词搜索排名
  • 个人怎样做网站系统优化的方法
  • 信宜市建设局网站关键字排名软件官网
  • 亿客搜网站建设关键对话
  • 奖励网站源码怎么推广平台
  • 建设网站合同如何点击优化神马关键词排名
  • 北京城市副中心投资建设公司网站seo产品推广
  • 网站建设昆明包装设计优化网络的软件
  • 黄山市非遗网站策划书友情链接互换网站
  • 做一个企业的网站怎么做企点客服
  • 自己的ip做网站seo技术培训东莞
  • unity网站后台怎么做免费个人网站源码
  • wordpress怎么修改主题首页网站建设seo
  • 美图秀秀网页版在线使用人员优化方案
  • 做网站图片太大好吗公司品牌宣传方案
  • 做微课的网站有哪些如何建立网页
  • 大型网站开发自动推广软件免费
  • 我的网站域名aso安卓优化公司
  • 美容行业培训网站建设网络媒体软文案例
  • 郑州网站开发公网站托管
  • 建设部网站建造师管理号营销策略都有哪些
  • 做响应式网站有什么插件seo扣费系统
  • 网站建设公司58郑州网络公司
  • 网站开发建设成本抖音seo排名优化
  • 深圳市网站建设清远头条新闻
  • 合肥网站搭建网站快速有排名