23.FastAPI后台任务

在应用开发中,偶尔会有这样的需求:当一个请求结束后,程序需要执行一些较慢的数据处理,比如:发送邮件、大的数据量的统计汇总等操作。在FastAPI中,提供了后台任务来处理响应后的任务。FastAPI后台任务的创建包括任务函数的创建,声明后台任务及添加后台任务。

23.1创建任务函数

任务函数是一个可以接收参数的标准函数, 可以是一个async def或正常的def函数。如:

async def write_log(msg:str):with open(file='access_log.log', mode='a') as log_file:log_file.write('{0}-{1}\r\n'.format(datetime.now().strftime('%Y-%m-%d, %H:%M:%S'), msg))

以上任务函数的作用是将消息写入日志文件。

23.2声明后台任务

声明后台任务的方法是在需要调用后台任务的路由函数中声明BackgroundTasks类型的对象,BackgroundTasks从fastapi中导入。如:

@app.get(path='/')
async def root(backgroundtasks: BackgroundTasks):

23.3添加后台任务

在路由操作函数中,调用 后台任务对象的add_task()方法添加后台任务函数并传递参数。如:

backgroundtasks.add_task(write_log, msg=str(uuid.uuid1()))

完整的代码如下:

# coding: utf-8
from fastapi import FastAPI
from fastapi import BackgroundTasks
from datetime import datetime
import uuid
​
app = FastAPI()
​
​
async def write_log(msg:str):with open(file='access_log.log', mode='a') as log_file:log_file.write('{0}-{1}\r\n'.format(datetime.now().strftime('%Y-%m-%d, %H:%M:%S'), msg))
​
@app.get(path='/')
async def root(backgroundtasks: BackgroundTasks):backgroundtasks.add_task(write_log, msg=str(uuid.uuid1()))return "Hello world"

执行请求:

curl http://127.0.0.1:8000
"Hello world"

多次执行后查看日志文件access_log.log,其内容如下:

2022-02-07, 15:43:30-a4d2d29a-87e9-11ec-b60a-70c94ec87656
​
2022-02-07, 15:43:31-a54c0c6c-87e9-11ec-bdd9-70c94ec87656
​
2022-02-07, 15:43:31-a5bb71d2-87e9-11ec-ba73-70c94ec87656

23.FastAPI后台任务相关推荐

  1. NoPause/NoEmgAbort的任务 与后台任务的区别

    NoPause/NoEmgAbort的任务示例 下面的例子显示了一个程序,可以监视控制器的错误并根据错误编号在发生错误时切换I/O On/Off. Function main Xqt ErrorMon ...

  2. Android 8.0适配指北

    本文已授权微信公众号:鸿洋(hongyangAndroid)原创首发. Android适配系列: Android 6.0 的动态权限管理 Android 7.0脱坑指南 Android 8.0适配指北 ...

  3. FastAPI 入门教程

    fastapi官网:https://fastapi.tiangolo.com, 中文官网:https://fastapi.tiangolo.com/zh/ 一.安装部署 前提:python3  pyc ...

  4. fastapi——简单快速入门

    fastapi--快速入门笔记 根据慕课网视频教程 地址:https://www.bilibili.com/video/BV1iN411X72b?p=36 print("\033[31m5. ...

  5. 2021-10-22 学习笔记:FastAPI基础使用指南

    2021-10-22 学习笔记:FastAPI基础使用指南 已经第三针疫苗了,祝所有人平安! 简单使用 路径参数 查询参数 请求体 查询参数和字符串校验 路径参数和数值校验 请求体参数 请求体 -- ...

  6. Celery + Flower + FastAPI + RabbitMQ ,Python实现异步消息队列和监控

    @Author:Runsen 消息队列 消息队列让应用程序在用户请求之外异步执行称为任务的工作.如果应用程序需要在后台执行工作,它会将任务添加到任务队列中.这些任务稍后由工作服务执行. Celery ...

  7. 三分钟了解 Python3 的异步 Web 框架 FastAPI

    快速编码,功能完善.从启动到部署,实例详解异步 py3 框架选择 FastAPI 的原因. FastAPI 介绍 FastAPI 与其它 Python-Web 框架的区别 在 FastAPI 之前,P ...

  8. fastapi 查询参数和字符串校验 / 路径参数和数值校验

    文章目录 1. 约束限制 2. 必须参数 3. 查询参数列表 / 多个值 4. 声明更多元数据 5. 别名参数 6. 弃用参数 7. Path 路径参数 8. 按需对参数排序 learn from h ...

  9. 2021 年最佳开源软件榜单,Python 高性能框架 FastAPI 上榜了!

    转自 | OSC开源社区 本文是 InfoWorld 2021 年公布的<最佳开源软件榜单>翻译稿. ‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍InfoWorld 是一家 ...

最新文章

  1. 替代方法_ASD干预:替代行为的正确使用方法和注意事项
  2. MTK:oemlock介绍
  3. POJ - 3080 Blue Jeans(暴力+KMP)
  4. UOJ.117.欧拉回路
  5. DtCms.ActionLabel.Article.cs
  6. english 2012020601
  7. Leetcode每日一题:155.min-stack(最小栈)
  8. 营销和生意人的4项基本修炼
  9. 剑指Offer之从上往下打印二叉树
  10. 机器学习笔试面试整理
  11. 无人车之美——论无人车辆系统的软件架构
  12. 温哥华岛大学计算机科学,温哥华有哪些知名大学排名(温哥华地区大学排名一览)...
  13. 支付宝小程序登录PHP
  14. Mysql如何存取Emoji表情包
  15. Bugku CRYPTO No Ciphertext RSA writeup by 树木
  16. 基于springboot的茶叶销售商城网站
  17. 【Qt+FFmpeg】给视频添加时间水印
  18. 免费的音频格式转换器有哪些?不妨试试这几种转写软件
  19. 训练 open-mmlab/mmclassification
  20. Windows AD证书服务系列---部署及管理证书模板(1)

热门文章

  1. vscode中文插件不生效问题解决
  2. PS学习笔记——通过三种方式调整人像照片亮度
  3. Ansible 系列之 Inventory 资源清单介绍
  4. jQuery实现html的table表的th和td标签的显示和隐藏
  5. Nexus 3 清理docker镜像
  6. 华为鸿蒙可以作为电脑系统吗,华为正式发布鸿蒙手机操作系统:让万物互联成为可能...
  7. python 表情包制作库_Django+PIL 做一个表情包生成网站
  8. SQL Server2016无域群集与高可用性AlwaysON配置新手教程
  9. 教师如何做到语言精练
  10. Oracle 表关联、半关联、反关联