基于(Flask+)Celery+SQLalchemy的定时任务工具

30 篇文章 2 订阅
11 篇文章 0 订阅

引言

熟悉Python Web开发的朋友都知道,Celery是编写后台任务的利器。比如一个Web网站在用户注册后需要发送邮箱认证,则可以使用Celery编写一个发送邮件的task异步发送邮件,而不需要在请求上下文那里阻塞,或者起一个线程。

那么,除了以上应用场景,我们还有一个场景是——定时任务。而Celery自带的定时任务功能,配置后是需要重启Celery才能启动的(最新版可能不需要了),而且配置不灵活,无法灵活地增删查改——因为定时任务的配置,是直接写在配置文件或者直接硬编码,不支持放入数据库中。

基于以上需求,我稍微找了下相关工具,django-celery-beat是基本是符合我的需求的,但可惜是基于Django。Flask似乎没有相关工具。

因此,为了解决这个需求,同时也因为本人喜欢Flask,所以花了点时间,参考django-celery-beat的架构和代码,把beat和SQLalchemy等抽离出来,形成一个独立的工具:celery-sqlalchemy-scheduler,这样就可以在Flask上使用类似django-celery-beat的功能了。

为什么标题给 Flask+ 加了括号,是因为这个工具本身可以独立运行,不依赖Flask,但初衷是配合Flask框架使用的,希望能够对标django-celery-beat。

下面是该项目的README。

celery-sqlalchemy-scheduler

一个基于 sqlalchemy 的 scheduler,作为 celery 定时任务的辅助工具。

快速开始

依赖

  • Python 3
  • celery >= 4.2.0
  • sqlalchemy

首先必须安装 celerysqlalchemy, 并且celery应该大于等于 4.2.0 版本。

$ pip install celery sqlalchemy

安装

通过 PyPi 安装:

$ pip install celery-sqlalchemy-scheduler

通过 github 仓库进行安装:

$ git clone git@github.com:AngelLiang/celery-sqlalchemy-scheduler.git
$ cd celery-sqlalchemy-scheduler
$ python setup.py install

使用示例

安装celery_sqlalchemy_scheduler之后,你可以查看examples目录下的代码:

  1. 启动 celery worker:

    $ celery worker -A tasks -l info
    
  2. 使用DatabaseScheduler作为 scheduler 启动 celery beat:

    $ celery beat -A tasks -S celery_sqlalchemy_scheduler.schedulers:DatabaseScheduler -l info
    

使用说明

beat 启动之后,默认会在当前目录下生成名称为schedule.db的 sqlite 数据库。Windows 下可以使用 SQLiteStudio.exe 工具打开查看里面的数据。

sqlite

数据库同步 scheduler 到 beat

当需要更新 scheduler,只需要修改schedule.db相关数据即可。修改好数据库的 scheduler 后,celery_sqlalchemy_scheduler并不会马上同步数据库的数据到 beat,我们最后还需要修改celery_periodic_task_changed表的第一条数据,只需要把last_update字段更新到最新的时间即可。当 beat 在下一个“心跳”之后,就会同步数据库的数据到 beat。

配置数据库

在配置 Celery 的时候,可以设置 sqlalchemy 数据库的路径,示例如下:

from celery import Celery

celery = Celery('tasks')

beat_dburi = 'sqlite:///schedule.db'

celery.conf.update(
    {'beat_dburi': beat_dburi}
)

当然,你可以改为使用 MySQL 数据库:

# 需要安装mysqlconnector:`pip install mysql-connector`
beat_dburi = 'mysql+mysqlconnector://root:root@127.0.0.1/celery-schedule'

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值