码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Flask工厂模式蓝图使用Celery实例【亲测可用,已应用于项目中】


    单一模式运行Celery在官方文档中已经贴出范例代码,这里我们不过多介绍。

    在使用Flask编写大型项目时,使用工厂模式的好处显而易见。因在Celery4.x以上版本已经抛弃了init_app方法,所以我们传统的在create_app中初始化并传入app对象的方式已经不可用了。我们改变方式在create_app中直接创建Celery对象就会导致循环导入问题,该如何解决呢?下面我们来一步步操作。

    一、首先贴出我的项目结构:

    简单介绍一下项目结构(重点说一下Celery组成):

    apis:项目接口存放文件夹

    apps:Flask项目传统文件夹,不在赘述

    ---admin:模型文件夹

    ---decorators.py:自定义装饰器

    ---tasks.py:Celery任务文件,存放所有调度执行任务

    ext:第三方扩展文件夹,创建第三方扩展对象。例如数据库、api、缓存、跨域等等

    ---celery.py:Celery主文件,创建celery对象,后期引用@celery.task()主要在这

    migrations:数据库迁移等文件夹

    static:静态文件文件夹

    templates:模版文件夹

    app.py:项目主启动文件

    celery_settings.py:Celery配置文件

    settings.py:项目主配置文件

    二、实现步骤

    1.下载Celery

    ?
    1
    pip install celery

    2.编写celery配置

    ?
    1
    2
    3
    4
    5
    6
    broker_url = 'redis://127.0.0.1:6379/0'
    result_backend = 'redis://127.0.0.1:6379/0'
    task_serializer = 'json'
    result_serializer = 'json'
    accept_content = ['json']
    broker_connection_retry_on_startup = True

    3.生成Celery对象

    在celery.py中编写:

    ?
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    def create_celery(app=None):
        celery = Celery(app.import_name, backend=broker_url, broker=result_backend)
        celery.conf.update(app.config)
        celery.config_from_object('celery_settings')
     
        class ContextTask(celery.Task):
     
            def __call__(self, *args, **kwargs):
                with app.app_context():
                    return self.run(*args, **kwargs)
     
        celery.Task = ContextTask
     
        return celery

    4.编写任务

    最后我们就可以在tasks.py中编写调度任务

    ?
    1
    2
    3
    4
    5
    6
    celery = create_celery(create_app())
    @celery.task()
    def insert_sql():
        for i in range(10):
            print(i)
            time.sleep(1)

    然后我们在需要执行调度任务的代码处增加启动代码:

    ?
    1
    insert_sql.delay()

    5.启动celery

    最后不要忘记启动celery,然后就可以在执行到启动任务代码时,执行异步任务。

     

    以上就是我们如何在Flask工厂模式中使用Celery范例了。

    新手上路,如有疏漏错误,还请各位大佬不吝赐教。

  • 相关阅读:
    澄海区图书馆《乡村振兴战略下传统村落文化旅游设计》许少辉八一新著
    【Proteus仿真】【STM32单片机】防火防盗GSM智能家居设计
    精简指令系统( RISC)
    07、JavaWeb启程——网络编程&Tomcat服务器
    Web前端大作业 体育主题足球网页制作 足球梅西HTML网页设计制作 dreamweaver学生网页源代码
    双十二有哪些数码好物值得入手、双十二必买数码好物清单
    【剑指 Offer 27. 二叉树的镜像】
    我要写整个中文互联网界最牛逼的JVM系列教程 | 「JVM与Java体系架构」章节:跨平台的语言Java和跨语言的平台JVM
    几种经典排序算法
    mindspore1.5版本下能正常运行到了1.6‘_check_version.py’报错
  • 原文地址:https://www.cnblogs.com/GongYuTest/p/17596848.html
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号