Celery实现定时任务crontab

Posted 小斌哥ge

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Celery实现定时任务crontab相关的知识,希望对你有一定的参考价值。


Celery实现定时任务crontab

一. 搭建celery定时任务架构
在项目中适合的位置新建一个定时任务目录celery_crontab,​​​在目录下创建config.py​​​,​​main.py​​,tasks.py三个文件,分别用于编写配置代码,定时任务实现代码,任务函数代码

# 目录结构
- celery_crontab
- config.py
- main.py
- tasks.py

二. 编写代码实现定时任务

  1. 在config.py中编写配置代码
from celery import Celery


# broker,rabbitmq
app = Celery(celery_crontab, broker=amqp://guest@localhost//)
# app = Celery(demo, broker=redis://127.0.0.1:6379/15)
  1. 在tasks.py中编写任务函数代码
from config import app


@app.task
def crontab_func1():
print(在此编写任务要实现的代码)


@app.task
def crontab_func2():
print(在此调用实现了定时任务功能的函数或方法)
  1. 在main.py中调用任务,并实现定时任务功能
from celery.schedules import crontab
from tasks import *


# 设置定时任务
app.conf.beat_schedule =
# 设置定时任务的参数,key可以自定义,见名知义,value为定时任务的相关参数的字典
contab_func1-every-1-minute:
# 指定要执行的任务函数
task: tasks.crontab_func1,
# 设置定时启动的频率,没分钟执行一次任务函数
schedule: crontab(minute=*/1),
# 传入任务函数的参数,可以是一个列表或元组,如果函数没参数则为空列表或空元组
args: []
,
contab_func2-every-day:
task: tasks.crontab_func2,
# 每周一至周五早上8点执行任务函数
schedule: crontab(minute=0, hour=8, day_of_week=[1, 2, 3, 4, 5]),
args: []
,



# 实现定时任务的另一种方式
@app.on_after_configure.connect
def setup_periodic_tasks(sender, **kwargs):
# sender.add_periodic_task(间隔时间秒, 任务名.s(参数), name=自定义任务名)
sender.add_periodic_task(10.0, crontab_func1.s(), name=crontab_func1 every 10)
sender.add_periodic_task(
# 每分钟执行一次
crontab(minute=*/1),
# .s()内传入任务函数需要的参数
crontab_func2.s()
)

在celery文档中例举了更多任务频率的设置方式,可以直接阅读文档
Celery documentation: ​​​http://docs.celeryproject.org/en/latest/userguide/periodic-tasks.html​​ 也可以按住Ctrl左键点击crontab,进入源码看__doc__(文档注释)内容,里面也例举了很多方法

三. 启动定时任务
启动定时任务应在main.py的位置,所以最好到main.py所在目录下执行命令,在其他位置启动时要指定main的路径


使用multi方式启动定时任务,celery会自动生成任务子节点和自动创建子进程
work为执行任务的进程名字
-A main 指定定时任务的启动函数main
-l info 指定日志等级为info
-B 将celery定时任务设置为后台守护进程,不占用终端
--logfile=celerylog.log 指定日志保存的文件名.也可指定路径加文件名

celery multi start work -A main -l info -B --logfile=celerylog.log
# 停止定时任务时,将start换成stop
celery multi stop work -A main -l info -B --logfile=celerylog.log
# 重启定时任务,将start换成restart
celery multi restart work -A main -l info -B --logfile=celerylog.log

Celery的使用场景非常多,不管是实现异步任务,还是实现定时任务,基本都会依赖命令来启动和停止任务,所以Celery的命令是非常多的,了解更多celery的命令可以到文档里查看

Celery documentation: ​​http://docs.celeryproject.org/en/latest/reference/celery.bin.celery.html​​ 也可以在终端输入 celery -h 查看帮助信息

Windows Bug:RuntimeError: This platform does not support detach.

site-packages\\celery\\platforms.py中尝试导入模块 “resource”时失败,这个模块不支持Windows,所以定时任务应该部署在Linux系统上.

Celery实现定时任务crontab_celery定时任务架构


以上是关于Celery实现定时任务crontab的主要内容,如果未能解决你的问题,请参考以下文章

Django实现异步定时任务

Bamboo Django Celery定时任务和时间设置

django定时任务

schedule与apscheduler与celery

Schedule—比 Celery 更轻量级的周期任务调度工具

celery介绍