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 Celery


celery_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 asyncio

from tortoise import Tortoise
from celery.signals import worker_process_init, worker_process_shutdown

from apps.models import User
from tasks import celery_app
from apps.tools.db_config import ORM_LINK_CONF


async 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_stack
    if _task_stack.top is not None:
        loop = _task_stack.top.request.loop
    else:
        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_stack
    if _task_stack.top is not None:
        loop = _task_stack.top.request.loop
    else:
        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()

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

计算机毕业设计 | vue+springboot汽车销售管理系统(附源码)

1,项目介绍 本项目基于spring boot以及Vue开发,前端实现基于PanJiaChen所提供的开源后台项目vue-element-admin改造。 针对汽车销售提供客户信息、车辆信息、订单信息、销售人员管理、财务报表等功能,提供经理和销售两种角色进行管理。 2&…

记录如何查询域名txt解析是否生效

要查询域名的TXT记录,可以使用nslookup命令。具体步骤如下:12 打开命令行终端。输入命令 nslookup -qttxt 域名,将"域名"替换为你要查询的实际域名。执行命令后,nslookup会返回域名的TXT记录值。 如何查询域名txt解析是…

面试题库-项目

1.项目主要实现了哪些功能? 本项目是专门为校园食堂窗口定制的一款软件产品,包括系统管理后台和客户端两部分。其中系统管理后台主要提供给食堂内部员工使用,可以对餐厅的菜品、套餐、订单、员工等进行管理维护。客户端主要提供给学生及校职…

什么是分库分表?代表性框架有哪些?

在互联网系统开发过程中,所谓的分库分表并不是一个新概念。或者说,对于很多开发人员而言,说起分库分表,大家都或多或少有所了解,也都知道数据量大了就需要进行分库分表。但是究竟如何实现分库分表呢? 要想…

创建Spring Boot项目及配置

目录 一、创建项目所需要的插件 1、安装插件 二、创建项目 三、创建项目所面临的常见问题。 1、IDEA不能识别 2、无效的发行版本 3、确认jar包是否下载成功 一、创建项目所需要的插件 1、安装插件 首先需要在IDEA插件里面搜索Spring,选择Spring Boot Helper…

什么是短信群发上行和下行

短信群发是一种广泛应用于商业和个人通信的技术,通过一次多条的方式,可以快速高效地传递信息。在实际的群发过程中,会涉及到上行和下行的概念。本文将详细介绍什么是短信群发上行和下行,并解释它们的应用。 什么是短信群发上行 群…

Dbeaver连接一段时间不操作后断开的问题

右键数据库连接点击编辑连接点击初始化将连接保持改成60s

BW4HANA混合建模 用ADSO的哪个视图?

写日志的ADSO除了1,2,3表之外。还会有6,7,8view。8view是上了BW4HANA2.0之后激活ADSO就会生成的。如果旧版本没有8,那就RSDG_ADSO_ACTIVATE激活一下。 如果勾了外部HANA视图,那就等于说还有一个HANA view。 首先咱知道ADSO是BW里面用来物理存储&#xf…

做一个属于自己的软件-pyside6快速上手教程

首先环境需要安装python3和pip,软件使用pycharm,安装也都很简单 首先需要安装pyside6,在终端执行: pip install pyside6 然后进入可视化编辑界面 pyside6-designer 进入后创建即可 可以从左侧点击鼠标拉组件进入到中间的工作区&#xff…

BLIP和BLIP2 论文讲解

文章目录 BLIPIntroductionMethod模型架构预训练目标字幕和过滤(Capfilt) BLIP2IntroductionMethod模型结构Q-Former预训练第一阶段Q-Former预训练第二阶段 BLIP 论文: 《BLIP: Bootstrapping Language-Image Pre-training for Unified Visio…

详解BOM编程

华子目录 BOM编程window对象常见的window对象的属性常见的window对象的方法注意 history对象history对象的属性history对象的方法 screen 对象navigator 对象属性方法 location对象属性方法示例 BOM编程 JavaScript本质是在浏览器中运行,所以JavaScript提供了BOM&a…

一文详解FDA邮件认证证书的重要性及其应用

随着全球化和电子商务的飞速发展,跨国贸易和沟通变得越来越频繁。在这个过程中,邮件作为重要的沟通工具,其安全性和可信度成为了各方关注的焦点。FDA(美国食品药品监督管理局)邮件认证证书就是在这一背景下应运而生的一…

1W 3KVDC 隔离 稳压单输出 DC/DC 电源模块——TPV-SAR 系列

TPV-SAR系列产品是专门针对PCB上分布式电源系统中需要与输入电源隔离且输出精度要求较高的电源应用场合而设计。该产品适用于;1)输入电源的电压变化≤5%;2)输入输出之前要求隔离电压≥3000VDC;3)对输出电压…

mac电脑如何安装java

1、检查当前系统的 Java 版本 打开终端,输入以下命令查看当前 Java 版本 /usr/bin/java -version 2、前往 Java 官网下载 Java JDK 打开 Java 官网 (https://www.java.com/zh-CN/download/) 并下载最新版本的 Java JDK。 3、安装 Java JDK 双击下载的 .dmg 文件启动安装程序…

【全开源】Java共享台信息共享系统源码

特色功能 信息整合与共享:该平台提供一站式信息整合服务,将各种类型的信息资源进行汇聚,方便用户快速查找和获取所需资源。多种共享功能:支持信息共享、共享车位、共享会议室、共享电动车等多种共享功能,提高资源利用…

Windows系统本地部署DrawDB数据库设计工具并实现无公网IP远程访问

文章目录 1. Windows本地部署DrawDB2. 安装Cpolar内网穿透3. 实现公网访问DrawDB4. 固定DrawDB公网地址 开发中很多时候都会使用到数据库,所以选择一个好用的数据库设计工具会让工作效率翻倍。在当今数字化时代,数据库管理是许多企业和个人项目的核心。设…

vue-fontawesome-elementui-icon-picker选择icon框架

第一步:安装vue-fontawesome-elementui-icon-picker依赖 npm install vue-fontawesome-elementui-icon-picker --save-dev 第二步:main.js配置 (放在element ui引入之后) import iconPicker from vue-fontawesome-elementui-icon-picker; Vue.use(ico…

Python-VBA函数之旅-setattr函数

目录 一、setattr函数的常见应用场景 二、setattr函数使用注意事项 三、如何用好setattr函数? 1、setattr函数: 1-1、Python: 1-2、VBA: 2、推荐阅读: 个人主页: https://blog.csdn.net/ygb_1024?…

笨方法自学python(六)

上一节中出现了\n,这个作用是换行。\后面带不同字符有不同的作用,我们先简单了解几个, 使用反斜杠 \ (back-slash) 可以将难打印出来的字符放到字符串。针对不同的符号有很多这样的所谓“转义序列(escape sequences)”,我们来练习…

OPC :快速上手

本系列为OPC技术的快速上以及持续研究和技术实战专栏,将不定期更新。 本章节提供OPC系列技术博文的快速导航。 《OPC服务器简介和入门介绍》 《物联网平台如何为OPC服务器创造新生命力》 《OPC服务器开发之WtOPCSvr——开发文档(1)》 《OPC服…