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

Fastapi+docker+tortoise-orm+celery

因为项目是后期引入celery,所以导致构建docker的时候只有fastapi的项目,celery的重启比较麻烦
1.docker安装celery

pip install celery

安装celery的时候注意python版本与celery版本的适配,有些celery的版本不支持python的版本,具体的版本请看celery官网里面的版本信息

2.在工程目录中创建celery的启动文件,这里我创建的是tasks.py 文件

from celery import Celerycelery_app = Celery("worker",broker="redis://:frasergen2022@192.168.2.189:26379/0",backend="redis://:frasergen2022@192.168.2.189:26379/0",include=["apps.tools.my_celery.__init__"]
)

这是celery的启动文件,里面最好不要引入你的项目里面的变量,如果引入你项目里的变了,后期去定义后台任务的时候,引入celery_app会陷入到循环引用的深坑

3.测试celery

celery -A tasks.celery_app worker --loglevel=info

在这里插入图片描述
4.可以后台启动celery

celery multi start w1 -A tasks.celery_app -l info --logfile=celerylog.log

在这里插入图片描述
这里不用启动,后续会用看门狗(watchdog)监控任务文件,如果文件修改,会重启celery

5.安装看门狗(watchdog)

pip install watchdog

参考链接:https://whoosy.cn/2019/08/01/Celery/celery使用/
后台启动watchdog

nohup watchmedo auto-restart --directory=/data/cloud_platform/apps/tools/my_celery/ --pattern=*.py --recursive -- celery -A tasks.celery_app worker --loglevel=info --logfile=celerylog.log > watchmedo.log 2> watchmedo.elog &

–directory : 监控路径
–pattern: 监控文件后缀
在这里插入图片描述
6.配置celery后台任务
1.配置tortoise-orm数据库连接

import asynciofrom tortoise import Tortoise
from celery.signals import worker_process_init, worker_process_shutdownfrom apps.models import User
from tasks import celery_app
from apps.tools.db_config import ORM_LINK_CONFasync def init_db():await Tortoise.init(config=ORM_LINK_CONF)@worker_process_init.connect
def on_worker_init(*args, **kwargs):print('初始化数据库')from celery._state import _task_stackif _task_stack.top is not None:loop = _task_stack.top.request.loopelse:loop = asyncio.get_event_loop()loop.run_until_complete(init_db())@worker_process_shutdown.connect
def on_worker_shutdown(*args, **kwargs):print('关闭数据库')from celery._state import _task_stackif _task_stack.top is not None:loop = _task_stack.top.request.loopelse:loop = asyncio.get_event_loop()loop.run_until_complete(Tortoise.close_connections())

2.配置后台任务

@celery_app.task(name="get_user_task")
def get_user_task(*args, **kwargs):asyncio.get_event_loop().run_until_complete(_get_user_task())async def _get_user_task():user = await User.filter().all()for item in user:print(item.nickname, item.username)print(f"{item.phone=}")

代码上传到docker后,celery会重启
在这里插入图片描述
7.测试接口+后台异步任务

@router.get("/get_user_info", summary="测试后台任务获取用户信息")
async def get_user_info():get_user_task.delay()return res()

结果:
在这里插入图片描述

相关文章:

Fastapi+docker+tortoise-orm+celery

因为项目是后期引入celery,所以导致构建docker的时候只有fastapi的项目,celery的重启比较麻烦 1.docker安装celery pip install celery安装celery的时候注意python版本与celery版本的适配,有些celery的版本不支持python的版本,具体的版本请看…...

springBoot笔记五(pom.xml\yml)

1-pom.xml里的start表示会安装已经设置好的相关版本的依赖,起步依赖。 2-optional设置为ture,显示可选择的依赖 3-修改端口server.port9999 4-yml文件书写 (1)空格代表分级,值前面要写空格 (2)-…...

三生随记——耳机里的诅咒

深夜,城市的灯火已经渐渐熄灭,只剩下一轮明月孤独地悬挂在天空中,洒下银白色的光芒。在这样一个寂静的夜晚,李浩独自一人坐在昏暗的房间里,耳机紧紧贴在耳边,他正在观看一部知名的恐怖电影。 电影里的恐怖情…...

嵌入式学习<2>:EXTI、ADC、NVIC和AFIO

嵌入式学习_part2 本部分笔记用于学习记录,笔记源头 >>b站江科大_STM32入门教程_EXTI EXTI、ADC、NVIC和AFIO 开发环境:keil MDK、STM32F103C8T6 1 )EXTI STM32F10xxx参考手册(中文)-> 中断与事件 ->…...

Nginx - server、listen、server_name和多服务请求处理(三)

server 上下文 server { }server指令用于配置一个虚拟服务。listen指令描述了本服务可接受链接的所有地址和端口,server_name指令列举了所有服务的名字,例如 server {listen 80;server_name example.org www.example.org; }listen 指令 Syntax: …...

C语言/数据结构——(相交链表)

一.前言 今天在力扣上刷到了一道题,想着和大家一起分享一下这道题——相交链表https://leetcode.cn/problems/intersection-of-two-linked-lists废话不多说,让我们开始今天的分享吧。 二.正文 1.1题目描述 是不是感觉好长,我也这么觉得。哈…...

【二叉树算法题记录】二叉树的所有路径,路径总和——回溯

目录 257. 二叉树的所有路径题目描述题目分析cpp代码 112. 路径总和题目描述题目分析cpp代码 257. 二叉树的所有路径 题目描述 给你一个二叉树的根节点root ,按任意顺序,返回所有从根节点到叶子节点的路径。 题目分析 其实从根节点往下走&#xff0c…...

verilog基础语法之数据类型

verilog基础语法之数据类型 1、 wire类型2、 reg类型3、向量 Verilog最常用的数据类型有两种:线网(wire)和寄存器(reg)。其中,wire 类型表示硬件单元之间的物理连线,reg用来表示存储单元。 1、…...

ansible部署lamp架构

搭建参考:ansible批量运维管理-CSDN博客 定义ansible主机清单 [rootansible-server ~]# vim /etc/hosts 192.168.200.129 host01 192.168.200.130 host02 [rootansible-server ~]# vim /etc/ansible/hosts [webserver] host01 host02 在ansible端编写index.html…...

Java面试——MyBatis

优质博文:IT-BLOG-CN 一、MyBatis 与 JDBC 的区别 【1】JDBC 是 Java 提供操作数据库的 API;MyBatis 是一个持久层 ORM 框架,底层是对 JDBC 的封装。 【2】使用 JDBC 需要连接数据库,注册驱动和数据库信息工作量大,每…...

Ubuntu-22.04使用systemd.mount挂载本地磁盘

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、systemd.mount是什么?二、使用步骤1.增加mount文件2.测试mount文件 三、补充说明总结 前言 挂载磁盘方式我们都知道很多人喜欢在/etc/fstab里面…...

【Qt】界面定制艺术:光标(cursor)、字体(font)、提示(toolTip)、焦点(focusPolicy)与样式表(styleSheet)的深度探索

文章目录 前言:1. cursor: 设置按钮的光标2. front:设置字体3. toolTip: 鼠标悬停提示4. focusPolicy:设置控件获取到焦点的策略5. styleSheet : 样式表总结: 前言: 在现代软件开发中,用户界面(UI)的设计和…...

Python GraphQL服务器实现库之tartiflette使用详解

概要 Tartiflette是一个为Python编写的GraphQL服务器实现,它建立在现代异步编程库如asyncio之上,提供了高性能的GraphQL执行环境。Tartiflette专注于提供最佳的开发者体验,支持最新的GraphQL特性。 安装 安装Tartiflette相对简单,但需要依赖于一些系统级的库。 首先,需…...

面试官:请介绍类加载过程,什么是双亲委派模型?

🚀类加载过程是指在 Java 程序运行时,将类的字节码文件加载到内存中并转换为 Class 对象的过程。Java 类加载器负责加载类,其主要任务是在运行时查找和装载类文件,以生成对应的 Class 对象。 Java的类加载过程一般可以分为以下几个…...

mysql 细分

索引选择性 索引列的唯一值数量 / 表中的总行数 mysql如何优化-CSDN博客 批量问题 批处理默认是逐条发送 SQL 到数据库的,没有充分利用数据库提供的原生批处理能力,需要额外的配置来启用真正的批处理支持,如使用ExecutorType.BATCH 自定…...

数据驱动实战二

目标 掌握数据驱动的开发流程掌握如何读取JSON数据文件巩固PO模式 1. 案例 对TPshop网站的登录模块进行单元测试 1.1 实现步骤 编写测试用例采用PO模式的分层思想对页面进行封装编写测试脚本定义数据文件,实现参数化 1.2 用例设计 1.3 数据文件 {"login…...

解决参考文献自动生成标号,换行时自动缩进

问题如下图所示,红色方框部分应该填充内容,但自动生成标号时不会填充: 解决方案: 1. 选中内容: 2. 找到布局-段落: 3. 选择“无”,即可。...

网络安全专业岗位详解+自学学习路线图

很多网安专业同学一到毕业就开始迷茫,不知道自己能去做哪些行业?其实网络安全岗位还是蛮多的,下面我会介绍一些网络安全岗位,大家可以根据自身能力与喜好决定放哪个方向发展。 渗透测试/Web安全工程师 主要是模拟黑客攻击&#…...

mybatisPlus一个事务中切换数据源概述

概述 在多数据源的配置下,业务中经常遇到在一个被本地事务包裹的save/edi方法中需要查询另一个数据源的数据; 直接查询会提示table不存在,这是因为一个事务和一个mysql连接是绑定的,mysql的连接背后包含了数据库信息,…...

如何在Android手机上恢复已删除的视频?

有时,由于不同的原因,可能会发生意外的数据丢失灾难。 那么如何在Android手机内存或没有计算机的情况下恢复已删除的视频呢?本文将给你一个答案。 如何在Android上恢复已删除的视频? 不要惊慌!您可以在Android手机上恢…...

【项目实战】使用Github pages、Hexo如何10分钟内快速生成个人博客网站

文章目录 一.准备工作1.安装git2.安装node安装 cnpm 3.使用 GitHub 创建仓库,并配置 GitHub Pages0.Github Pages是什么1. 在 GitHub 上创建一个新仓库2. 创建您的静态网站3. 启用 GitHub Pages4. 等待构建完成5. 访问您的网站 二. Hexo1.什么是Hexo2.安装Hexo1. 安…...

大数据中服役新数据节点和退役旧节点步骤(hive,hadoop)

1- 节点上线操作 当要新上线数据节点的时候 ,需要把数据节点的名字追加在 dfs.hosts (1)关闭新增节点的防火墙 (2)在 NameNode 节点的 hosts 文件中加入新增数据节点的 hostname (3)在每个新…...

数论:不定方程的引入

研究的对象:不定方程 文章目录 研究的对象:不定方程不定方程引入:裴蜀定理证明:欧几里得算法证明:充分性证明:必要性证明: 战术总结: 不定方程引入: 不定方程&#xff0…...

数据中心法

数据中心法是实现词法分析器的结构化方法。通过设计主表和子表分开存储状态转移信息,实现词法分析器的控制逻辑和数据结构分离。 主要解决了状态爆炸、难以维护和复杂性的问题。 状态爆炸是指当状态和转移较多时,单一使用一个表来存储所有的信息的话会导…...

pdffactory pro8.0虚拟打印机(附注册码)

PdfFactory pro是一款非常受欢迎的PDF虚拟打印机,可以帮助用户将你的其他文档保存为PDF格式。请为用户提供打印/发送/加密等多种实用功能,以及一套完善的PDF打印方案。 使用说明 下载pdfFactory Pro压缩包,解压后,双击exe文件&am…...

处理用户输入

目录 一、传递参数 1.1 读取参数 1.2 读取脚本名 二、跟踪参数 三、移动参数 四、处理选项 4.1 查找选项 4.1.1 处理简单选项 4.1.2 分离参数和选项 4.1.3 处理含值的选项 五、选项标准化 5.1 使用 getopt 命令 5.1.1 命令格式 5.1.2 在脚本中使用getopt 5.2 使用…...

在装有centOS7的虚拟机上进行MySQL的安装部署

1.MySQL数据库介绍 1.开源的,跨平台的,社区版免费 2.支持多种存储引擎 3.支持多种主从复制 MySQL版本:5.6 5.7 8.0 https://www.mysql.com MySQL官网 2.安装MySQL5.7 1.配置MySQL仓库 2.安装MySQL服务端软件 3.启动MySQL服务 s…...

【vivado】debug相关时钟及其约束关系

一、前言 在xilinx fpga的degug过程中,经常出现由于时钟不对而导致的观测波形失败,要想能够解决这些问题需要了解其debug的组成环境以及之间的数据流。本文主要介绍debug过程中需要的时钟及各时钟之间的关系。 二、debug相关时钟 Vivado 硬件管理器使…...

什么是HTTP/2?

HTTP/2(原名HTTP 2.0)即超文本传输协议第二版,使用于万维网。HTTP/2主要基于SPDY协议,通过对HTTP头字段进行数据压缩、对数据传输采用多路复用和增加服务端推送等举措,来减少网络延迟,提高客户端的页面加载…...

【ChatGPT with Date】使用 ChatGPT 时显示消息时间的插件

文章目录 1. 介绍2. 使用方法2.1 安装 Tampermonkey2.2 安装脚本2.3 使用 3. 详细文档指引4. 反馈5. 未来计划6. 开源协议X. Changelog 1. 介绍 有时我们希望看到 ChatGPT 的消息时间,但 ChatGPT 并没有显示消息时间的功能。 本项目通过 Tampermonkey 开发&#xf…...