目录结构
第一步 celery_task 里面的celery文件
import time from celery import Celery # celery from celery.schedules import crontab # 将此文件celery启动 windows celery worker -A celery_task --loglevel=info -P gevent # 将此文件celery启动 linux celery worker -A celery_task --loglevel=info # 异步任务 Async Task # 定时任务 Celery Beat # 消息中间件 Broker # 任务执行单元 Celery Worker # 结果存储 Backend # 消息中间件 Broker broker = 'redis://192.168.10.10' # 结果存储 Backend backend = 'redis://192.168.10.10/0' app = Celery('my_task', broker=broker, backend=backend, include=['celery_task.celery_task_one', 'celery_task.celery_task_two', ]) # 时区 app.conf.timezone = 'Asia/Shanghai' # 是否使用UTC app.conf.enable_utc = False # 我要对beat任务生产做一个配置,这个配置的意思就是每10秒执行一次 celery_task.celery_task_one(10,10) app.conf.beat_schedule = { "each10s_task": { "task": "celery_task.celery_task_one.add", "schedule": 30, # 每30秒钟执行一次 # 'schedule': timedelta(seconds=30), "args": (10, 10) }, "each1m_task": { "task": "celery_task.celery_task_two.add_add", "schedule": crontab(minute='*/1'), # 每一分钟执行一次 "args": (10, 30) }, "each24hours_task": { "task": "celery_task.celery_task_two.add", "schedule": crontab(), # 每一分钟执行一次 "args": (10, 100000) } } # 任务结果过期设置 `result_expires=3600' 。默认设置是1天, app.conf.update( result_expires=3600, ) # 以上配置完成之后,还有一点非常重要 # 不能直接创建Worker了,因为我们要执行周期任务,所以首先要先有一个任务的生产方 # celery beat -A celery_task # celery worker -A celery_task -l INFO -P eventlet
第二步 do_task
from celery_task.celery_task_one import add as add1 from celery_task.celery_task_two import add as add2 from celery_task.celery import app from celery.schedules import crontab # 将任务交给Celery的Worker执行 res = add1.delay(1, 3) print(res.id) res = add2.delay(1, 3) print(res.id) """ Celery4 新版的好处是,可以把定时任务和普通的任务一样单独定义了。多了 @app.on_after_configure.connect 这个装饰器,3版本是没有这个装饰器的。 写代码 单独再创建一个py文件,存放定时任务: 链接:https://www.jianshu.com/p/c622f5f5d015 """
第三步 将所有任务 写在celery_task 下面 'celery_task.celery_task_one', 'celery_task.celery_task_two' 进行调取执行
'celery_task.celery_task_one'
from .celery import app import time @app.task def add(x, y): time.sleep(5) return x + y
'celery_task.celery_task_two'
from .celery import app import time @app.task def add(x, y): time.sleep(5) return x * y @app.task def add_add(x, y): time.sleep(5) return x * y
# 在 celery_task 目录下执行 是用来生产定时任务(app.conf.beat_schedule配置的)
# celery beat -A celery_task
-------------------------------------------------------------
# 在 celery_task 目录下执行,这个的目的是启动 worker , worker是用来执行,生产的任务
# celery worker -A celery_task -l INFO -P eventlet
# 将此文件celery启动 windows celery worker -A celery_task --loglevel=info -P gevent
# 将此文件celery启动 linux celery worker -A celery_task --loglevel=info
# 在 celery_task 目录下执行