网站 弹出,大连自动seo,wordpress百度分享插件下载,哔哩哔哩网页版搜索不了Celery 定时任务教程
Celery 是一个强大的异步任务队列/作业队列基于分布式消息传递的开源项目。它广泛用于处理各种类型的后台任务#xff0c;例如发送电子邮件、处理图像、数据分析和视频转换等。
本文将介绍如何使用 Celery 实现定时任务#xff0c;包括#xff1a;
安…Celery 定时任务教程
Celery 是一个强大的异步任务队列/作业队列基于分布式消息传递的开源项目。它广泛用于处理各种类型的后台任务例如发送电子邮件、处理图像、数据分析和视频转换等。
本文将介绍如何使用 Celery 实现定时任务包括
安装 Celery配置 Celery定义定时任务启动 Celery worker 和 beat
1. 安装 Celery
首先您需要安装 Celery。可以通过以下命令进行安装
pip install celery2. 配置 Celery
在django项目主文件夹下即settings.py同目录创建一个名为 celery.py 的文件并添加以下代码
import osfrom django.conf import settingsfrom celery import Celery
from celery.schedules import crontab# Set the default Django settings module for the celery program.
os.environ.setdefault(DJANGO_SETTINGS_MODULE, MainConfig.settings)app Celery(MainConfig)# Using a string here means the worker doesnt have to serialize
# the configuration object to child processes.
# - namespaceCELERY means all celery-related configuration keys
# should have a CELERY_ prefix.
app.config_from_object(django.conf:settings, namespaceCELERY)# Load task modules from all registered Django apps.
app.autodiscover_tasks()# 定时任务配置
app.conf.beat_schedule {schedule_task: {task: myapp.tasks.add, # 任务代码所在文件schedule: crontab(hour*/3), # 每3小时执行一次},
}app.task(bindTrue, ignore_resultTrue)
def debug_task(self):print(fRequest: {self.request!r})这里我们使用 redis作为消息代理。
crontab示例
例子意义crontab()每分钟执行一次。crontab(minute0, hour0)每天午夜执行。crontab(minute0, hour*/3)每三小时执行一次午夜、凌晨 3 点、早上 6 点、早上 9 点、中午、下午 3 点、下午 6 点、晚上 9 点。crontab(minute0, hour0,3,6,9,12,15,18,21)与以前相同。crontab(minute*/15)每15分钟执行一次。crontab(day_of_weeksunday)每周日每分钟执行一次。crontab(minute*, hour*, day_of_weeksun)与以前相同。crontab(minute*/10, hour3,17,22, day_of_weekthu,fri)每十分钟执行一次但仅限于周四或周五凌晨 3 点至 4 点、下午 5 点至 6 点和晚上 10 点至 11 点之间。crontab(minute0, hour*/2,*/3)每双数小时和每个能被三整除的小时执行。这意味着除以下时间外的每个小时凌晨 1 点、凌晨 5 点、早上 7 点、上午 11 点、下午 1 点、下午 5 点、晚上 7 点、晚上 11 点crontab(minute0, hour*/5)执行可被 5 整除的小时。这意味着它是在下午 3 点触发而不是下午 5 点因为下午 3 点等于 24 小时制时钟值“15”可以被 5 整除。crontab(minute0, hour*/3,8-17)每个能被 3 整除的小时执行一次办公时间上午 8 点至下午 5 点每小时执行一次。crontab(0, 0, day_of_month2)每月第二天执行。crontab(0, 0, day_of_month2-30/2)在每个双数日执行。crontab(0, 0, day_of_month1-7,15-21)在每月的第一周和第三周执行。crontab(0, 0, day_of_month11, month_of_year5)每年五月十一日执行。crontab(0, 0, month_of_year*/3)每季度第一个月每天执行。
settings.py相关配置
#从环境变量中读取服务网络
REDIS_SERVER_URL os.environ.get(REDIS_SERVER_URL,127.0.0.1)
# redis 配置
CACHES {default: {BACKEND: django_redis.cache.RedisCache,LOCATION: fredis://{REDIS_SERVER_URL}:6379/1,OPTIONS: {CLIENT_CLASS: django_redis.client.DefaultClient,}}
}# celery
CELERY_BROKER_URL fredis://{REDIS_SERVER_URL}:6379/0
CELERY_RESULT_BACKEND fredis://{REDIS_SERVER_URL}:6379/0
CELERY_BROKER_CONNECTION_RETRY_ON_STARTUP True
CELERY_TASK_SERIALIZER json
CELERY_RESULT_SERIALIZER json
CELERY_ACCEPT_CONTENT [json]
CELERY_TIMEZONE Asia/Shanghai
CELERY_ENABLE_UTC True在django主项目目录的__init__文件下加入以下代码
from .celery import app as celery_app__all__ (celery_app,)3. 定义定时任务
在您的项目中创建一个名为 tasks.py 的文件并添加以下代码
from celery import shared_taskshared_task
def add(x, y):return x y这里我们定义了一个名为 add 的任务它接受两个参数 x 和 y 并返回它们的和。
5. 启动 Celery worker 和 beat
使用以下命令启动 Celery worker 和 beat
celery -A MainConfig worker -l info -P threads
celery -A main beat --loglevelinfo这里-A 指定当前目录作为工作目录--loglevelinfo 设置日志级别为 info。
总结
使用 Celery 实现定时任务非常简单。只需按照上述步骤进行配置即可轻松实现各种复杂的定时任务。