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()

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/9890.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网络基础-ICMP协议

ICMP(Internet Control Message Protocol, Internet控制消息协议) ICMP协议是IP协议的辅助协议,用于在IP网络上发送控制消息,它通常被用于诊断网络故障、执行网络管理任务以及提供一些错误报告;对于收集各…

深入理解线程的两阶段终止模式:确保线程安全退出

序言 在多线程编程中,线程的安全退出是一个重要的问题。在实际应用中,我们经常需要确保线程在退出时能够完成必要的清理工作,同时避免因资源泄漏或状态不一致而导致的问题。线程的两阶段终止模式是一种解决这个问题的有效方法。本文将深入探…

React - sass配置

1. idea下载Easy Sass插件: 2. 启用后,我们写的scss文件不能直引用,所以还要下载sass依赖: (推荐使用.scss,因为与原生.css写法接近,.sass格式更严格) // 下载sass依赖 npm install sass sass-loader --s…

目标检测算法YOLOv7简介

YOLOv7由Chien-Yao Wang等人于2022年提出,论文名为:《YOLOv7: Trainable bag-of-freebies sets new state-of-the-art for real-time object detectors》,论文见:https://arxiv.org/pdf/2207.02696 ,项目网页&#xff…

【Linux】从零开始认识动静态库 - 静态库

送给大家一句话: 永不言弃,就是我的魔法! ——阿斯塔《黑色四叶草》 ଘ(੭ˊ꒳​ˋ)੭✧ଘ(੭ˊ꒳​ˋ)੭✧ଘ(੭ˊ꒳​ˋ)੭✧ ଘ(੭ˊ꒳​ˋ)੭✧ଘ(੭ˊ꒳​ˋ)੭✧ଘ(੭ˊ꒳​ˋ)੭✧ ଘ(੭ˊ꒳​ˋ)੭✧ଘ(੭ˊ꒳​ˋ)੭✧ଘ(੭ˊ꒳​ˋ)੭✧ 从零…

Linux虚拟机运行“yum install gcc-c++”报错“Loading mirror speeds from cached hostfile”

目录 一、在Linux上安装Redis时,在终端执行命令“yum install gcc-c”时,报错: 二、然后发现linux的网络不通,什么网站都访问不了 三、连上网后,再变换yum源 四、重新运行yum install gcc 一、在Linux上安装Redis时…

Java中55种锁,高级面试题,最新面试题

Java中乐观锁在实际应用中如何解决并发问题? 乐观锁通过假设并发冲突发生概率较低来解决并发问题,主要通过数据版本控制实现。在更新数据前,会检查数据版本是否发生变化,只有在数据版本未变时才允许更新,这样可以避免…

nginx_01

1.安装 yum install epel-release -y # 安装yum的扩展包 yum install nginx -y systemctl start nginx.service #启动nginx systemctl enable nginx.service # netstat -lntup # 查看端口占用情况 # 可以看到nginx默认占用了80端口 2.nginx配置 # 注意配置文件的语法格式…

万物生长大会 | 创邻科技再登杭州准独角兽榜单

近日,由民建中央、中国科协指导,民建浙江省委会、中国投资发展促进会联合办的第八届万物生长大会在杭州举办。 在这场创新创业领域一年一度的盛会上,杭州市创业投资协会联合微链共同发布《2024杭州独角兽&准独角兽企业榜单》。榜单显示&…

小红书搞钱美学课-6.0升级版,账号搭建/爆款创作/工具实战/账号变现篇

让我们用视觉撬动流量 课程体系 334253课程权益(5周服务期) 3节账号运营基础课3节自媒体笔记创作课。4节封面设计实操课2次实操加餐分享5次作业指导(一对一)3次答疑直播 课程大纲 一、账号搭建篇 变现模板、精准定位 二、爆款创作篇爆款选题、首图、文案与脚本、快速涨粉…

【计算机毕业设计】springboot工资管理系统

人类现已迈入二十一世纪,科学技术日新月异,经济、资讯等各方面都有了非常大的进步,尤其是资讯与 网络技术的飞速发展,对政治、经济、军事、文化等各方面都有了极大的影响。 利用电脑网络的这些便利,发展一套工资管理系…

权力集中,效率提升,中心化模式的优势与挑战

​🌈 个人主页:danci_ 🔥 系列专栏:《设计模式》 💪🏻 制定明确可量化的目标,坚持默默的做事。 🚀 转载自热榜文章🔥:探索设计模式的魅力:权力集中…

IO 5.10

在一个进程中,创建一个子线程。 主线程负责:向文件中写入数据 子线程负责:从文件中读取数据 要求使用线程的同步逻辑,保证一定在主线程向文件中写入数据成功之后,子线程才开始运行,去读取文件中的数据#incl…

学习java的继承

1.什么是继承 java中提供了一个关键字,extends,可以让一个类与另一个类建立起父子关系。 例如 public class B extends A { --- } 在这里,我们称A类为父类(也被称为基类或者超类)B类称为子类(或者是派生…

debian10 (armbian) 配置CUPS 服务

更新apt apt-update安装相关软件 apt-get install ghostscript apt-get install dc apt-get install foomatic-db-engine apt-get install cups3.修改配置文件 nano /etc/cups/cupsd.conf Listen localhost:631改为 Listen 0.0.0.0:631 以下四段配置加入Allow All # Only li…

【智能优化算法】矮猫鼬优化算法(Dwarf Mongoose Optimization Algorithm,DMHO)

矮猫鼬优化算法(Dwarf Mongoose Optimization Algorithm,DMHO)是期刊“COMPUTER METHODS IN APPLIED MECHANICS AND ENGINEERING”(IF 7.3)的2022年智能优化算法 01.引言 矮猫鼬优化算法(Dwarf Mongoose Optimization Algorithm,DMHO)模仿矮猫鼬的觅食行…

天府锋巢直播产业基地构建成都电商直播高地

天府锋巢直播产业基地自成立以来,一直秉承着创新、协同、共赢的发展理念,吸引了众多直播企业纷纷入驻。随着直播产业的迅猛发展,改成都直播基地内的配套服务也显得尤为重要。本文将深入探讨入驻天府锋巢直播产业基地后,配套的直播…

错误处理机制——vba(vb.net)

程序出现错误时可采用如下错误处理机制:出错时跳到标签处,判断错误类型修正错误,重新返回正确标签处,继续运行程序。 代码如下: Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click…

Golang面向对象编程(一)

文章目录 结构体基本介绍结构体定义方式创建结构体变量结构体内存对齐结构体类型转换字段的Tag标签 方法基本介绍方法的定义和调用方法调用的传参机制String方法 结构体 基本介绍 基本介绍 Go支持面向对象编程特性,包括封装、继承和多态,但Go中没有类&a…

Linux——综合实验

要求 按照上面的架构部署一个简单的web节点所有的服务器使用DNS服务器作为自己的DNS服务器 就是/etc/reslov.conf 中nameserver的值必须是途中dns服务器的地址所有的数据库都是用mysql应用 nfs共享导出在客户端(web服务器上)使用autofs在自动挂载,或者写入/etc/fsta…