使用Celery实现定时任务功能

☆樱花仙子☆ 提交于 2020-01-01 01:21:33

使用Celery实现定时任务功能

前言

Python实现定时任务的方式有很多,如使用Celery、schedule模块、Threading模块中的Timer、sched模块、定时框架APScheduler,都各有特色。在多次对比之后,我决定使用Celery,下面我们介绍一下如何使用Celery。

结构图

下发命令
转发命令
存储执行结果
beat-任务调度器
broker-MQ
worker-执行任务单元
backend-MQ或数据库

1.准备环境

首先安装Celery

pip install django
pip install celery
pip install django_celery_beat
pip install mysqlclient

安装rabbitmq(可以使用redis代替)

brew install rabbitmq

安装完成之后启动服务

brew services start rabbitmq

2.创建项目

初始化项目

django-admin startproject pystudy

修改django配置

# 集成django_celery_beat
INSTALLED_APPS = [
	...,
    'django_celery_beat'
]
# 修改默认时区以及语言
LANGUAGE_CODE = 'zh-hans'
TIME_ZONE = 'Asia/Shanghai'

新增celery.py文件,内容如下

from celery import Celery
from celery.schedules import crontab

broker = 'amqp://guest@localhost//'
app = Celery('test', broker=broker)

# 初始化任务,不是必须的,如果要添加自己的任务,可以在django的admin页面添加任务
@app.on_after_configure.connect
def setup_periodic_tasks(sender, **kwargs):
    # 周期性任务
    sender.add_periodic_task(3, test.s('hello world'), name='3秒一次')

    # 定时任务, 每周五的17点30分执行一次
    sender.add_periodic_task(
        crontab(hour=17, minute=30, day_of_week=5),
        test.s('下班喽,又休息两天!'),
    )
    
@app.task
def test(arg):
    print(arg)

目录结构

├── manage.py
└── pystudy
    ├── init.py
    ├── celery.py
    ├── settings.py
    └── urls.py

3.运行

设置环境变量

export DJANGO_SETTINGS_MODULE=pystudy.settings

运行任务调度器

celery -A pystudy beat -l info --scheduler django_celery_beat.schedulers:DatabaseScheduler

执行结果截图
执行截图
运行任务执行单元

celery -A pystudy worker --loglevel=info

执行结果截图
执行结果截图
运行django,可以在admin页面查看数据库表中的数据

python manage.py runserver

以上是简单的实现,如果要在项目中用的话,需要根据业务去扩展。

附上Demo:github/pystudy

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!