flask集成celery

flask启动文件app.py

from flask_celery import celery
app = Flask('celery') 
app.config.from_json('config.json')
celery.init_app(app)

flask_celery文件

from celery import Celery


class FlaskCelery(Celery):

    def __init__(self, *args, **kwargs):
        super(FlaskCelery, self).__init__(*args, **kwargs)

    def init_app(self, app):
        redis = app.config.get('REDIS')
        password = redis.get('Password')
        host = redis.get('Host')
        port = redis.get('Port')
        db = redis.get('DB').get('CELERY')
        app.config['CELERY_BROKER_URL'] = f'redis://:{password}@{host}:{port}/{db}'
        app.config['CELERY_RESULT_BACKEND'] = f'redis://:{password}@{host}:{port}/{db}'
        app.config['beat_dburi'] = app.config['SQLALCHEMY_DATABASE_URI']
        app.config['CELERY_TIMEZONE'] = 'Asia/Shanghai'
        app.config['CELERY_ENABLE_UTC'] = False
        self.__init__(app.name, broker=app.config['CELERY_BROKER_URL'])
        self.app = app
        self.conf.update(app.config)
        # 自动搜索异步任务
        self.autodiscover_tasks(['src.celery_tasks'])


celery = FlaskCelery()

根目录下新建src/celery_tasks

from celery.schedules import crontab
from celery.task import periodic_task, task

from flask_celery import celery


@periodic_task(name='celery_tasks.do_some_task',
               run_every=crontab(minute='*', hour='*', day_of_week='*',
                                 day_of_month='*', month_of_year='*'))
def do_some_task():
    with celery.app.app_context():
        celery.app.logger.info("I have the application task")

控制台分别执行以下两个命令

# 本地启动celery_worker
celery worker -A app:celery -l info
# 本地启动celery_beat
celery beat -A app:celery -S celery_sqlalchemy_scheduler.schedulers:DatabaseScheduler -l info

成功执行任务

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值