前言
Celery在python中的应用除了实现异步任务(async task)外也可以执行定时任务(beat)
一、Celery定时任务是什么?
Celery默认任务单元由任务生产者触发,但有时可能需要其自动触发,而Beat进程正是负责此类任务,能够自动触发定时/周期性任务.

Celery 进行周期任务也很简单,只需要在配置中配置好周期任务,然后在运行一个周期任务触发器(beat)即可,具体网上看
二、使用步骤
win10 + python3 + redis + celery 5
1.代码结构

celery_config.py配置:
代码如下(示例):
- #-*-coding=utf-8-*-
- from datetime import timedelta
- from celery.schedules import crontab
- # 中间件
- BROKER_URL = 'redis://scck2svr03:6379/6'
- # 结果存储
- # CELERY_RESULT_BACKEND = 'redis://:scck2svr03:6379/5'
- CELERYD_CONCURRENCY = 20 # 并发worker数
- CELERYD_FORCE_EXECV = True # 非常重要,有些情况下可以防止死锁
- # CELERY_TASK_SERIALIZER = 'msgpack' # 任务序列化和反序列化使用msgpack方案
- CELERY_RESULT_SERIALIZER = 'json' # 读取任务结果一般性能要求不高,所以使用了可读性更好的JSON
- CELERY_TASK_RESULT_EXPIRES = 60 * 60 * 24 # celery任务结果有效期
- CELERY_ACCEPT_CONTENT = ['json', 'msgpack'] # 指定接受的内容类型
- CELERY_TIMEZONE = 'Asia/Shanghai' # celery使用的时区
- CELERY_ENABLE_UTC = True # 启动时区设置
- # 默认worker队列
- #CELERY_DEFAULT_QUEUE = 'default'
- # 异步任务
- CELERY_IMPORTS = (
- "celery_learning.email.tasks"
- )
- # celery beat
- CELERYBEAT_SCHEDULE = {
- 'periodic_task-every-minute': {
- 'task': 'celery_learning.email.tasks.add',
- 'schedule': crontab(minute="*/1"),
- 'args': (1,2)
- },
- 'periodic_task-every-10second':{
- 'task':'celery_learning.email.tasks.add',
- 'schedule':timedelta(seconds=10),
- 'args':(1,12)
- }
- }
2.启动定时任务
代码如下(示例):
- 终端1:celery -A celery_learning.celery_app worker -l info -P gevent
- 终端2:celery -A celery_learning.celery_app beat
终端1

终端2

3.执行结果
两个定时任务,一个每分钟执行,一个每10秒执行
结果如下:

总结
到此这篇关于Python Celery定时任务详细讲解的文章就介绍到这了,更多相关Python Celery 内容请搜索w3xue以前的文章或继续浏览下面的相关文章希望大家以后多多支持w3xue!