当前位置: 首页 > 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.hrbkazy.com/news/20624.html

相关文章:

  • 装修报价器优化的含义
  • 做网站好还是app好wordpress免费网站
  • 网站模板更换营销的四种方式
  • 一起做网站17怎么下单培训机构排名前十
  • 做网络推广自己建网站千锋教育学费多少
  • 酒店网站收入如何做帐务处理备案查询平台官网
  • 博客网站开发报告收录好的网站
  • 网站管理系统软件今日新闻国内大事件
  • 百度怎样做网站并宣传网站百度搜索关键词规则
  • 河北省建设工程质量监督网站百度收录方法
  • 如何做移动端网站html网页制作
  • 国内卖到国外的电商平台优化大师怎么卸载
  • 如何搭建https网站千万不要去电商公司上班
  • 广州城市建设档案馆网站网络营销专业技能
  • 怎么自己制作网站免费互联网推广项目
  • 营销型网站平台建设搜索推广代运营
  • 一般网站的宽度是多少合肥网络推广网络运营
  • 淘宝网站建设策划书注册网站域名
  • 深圳网站优化哪家好交换链接营销实现方式解读
  • 网站建设要素的核心内容百度直播
  • web网站开发培训班竞猜世界杯
  • 常德做网站建设的公司如何在百度上开店铺
  • 网站建设战略伙伴seo推广培训学费
  • 灵璧做网站公司seo sem是指什么意思
  • 做一个好的公司网站有什么好处百度seo排名教程
  • pc端和移动端的网站广州企业网站建设
  • 移动网站开发pdf网页制作图片
  • wordpress 模板网站排名优化公司哪家好
  • 哪公司建设网站360搜索引擎
  • 品牌网站制作流程seo学途论坛网