使用Celery实现定时任务功能
前言
Python实现定时任务的方式有很多,如使用Celery、schedule模块、Threading模块中的Timer、sched模块、定时框架APScheduler,都各有特色。在多次对比之后,我决定使用Celery,下面我们介绍一下如何使用Celery。
结构图
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
来源:CSDN
作者:凡事都有解
链接:https://blog.csdn.net/qq_26734613/article/details/103748057