Celery包结构应用

Posted caoyu080202201

tags:

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

一、创建celery包

  1、新建一个包,任意命名,如,celery_task。

  2、包内创建celery对象,指定命名为celery.py:

from celery import Celery

broker = redis://127.0.0.1:6379/1
backend = redis://127.0.0.1:6379/2
app = Celery(__name__, broker=broker, backend=backend, include=[celery_task.task1, celery_task.task2, ])

  3、包内创建任务,以task1.py为例:

from .celery import app


@app.task
def add(x, y):
    return x + y

二、异步任务和延时任务

  1、启动worker:celery worker -A celery_task -l info (-P eventlet)

  2、投放任务:

from datetime import datetime, timedelta
from celery_task.task1 import add

ret = add.delay(10, 5)  # 返回任务id

eta = datetime.utcnow() + timedelta(seconds=10)  # 默认要用utc时间,延时10秒
ret2 = add.apply_async(args=(60, 30), eta=eta)  # 传入任务参数和执行时间,返回任务id

  3、获取任务执行结果:

from celery_task import app
from celery.result import AsyncResult

id = 3e397fd7-e0c1-4c5c-999c-2655a96793bb  # 任务id
if __name__ == __main__:
    async = AsyncResult(id=id, app=app)  # 填入任务编号和celery对象
    if async.successful():
        result = async.get()
        print(result)
    elif async.failed():
        print(任务失败)
    elif async.status == PENDING:
        print(任务等待中被执行)
    elif async.status == RETRY:
        print(任务异常后正在重试)
    elif async.status == STARTED:
        print(任务已经开始被执行)

 三、定时任务

  1、celery.py:

from datetime import timedelta
from celery.schedules import crontab
from celery import Celery

broker = redis://127.0.0.1:6379/1
backend = redis://127.0.0.1:6379/2
app = Celery(__name__, broker=broker, backend=backend, include=[celery_task.task1, celery_task.task2])

# 任务的定时配置
app.conf.timezone = Asia/Shanghai  # 更换市区
app.conf.enable_utc = False  # 不使用utc
app.conf.beat_schedule = {
    add-task: {
        task: celery_task.task1.add,  # 指定任务
        # ‘schedule‘: timedelta(seconds=3),  # 每隔固定时间执行
        schedule: crontab(hour=8, day_of_week=1),  # 每周一早八点
        args: (300, 150),  # 任务参数
    },
}

  2、启动beat,启动worker:

    ①beat:启动后待命,到指定时间自动投放任务。

    ②worker:celery worker -A celery_task -l info (-P eventlet)

    

以上是关于Celery包结构应用的主要内容,如果未能解决你的问题,请参考以下文章

Celery定时任务细讲

celery

Celery框架的基本使用与介绍

celery介绍

Redis与Celery基础

Celery实现定时任务crontab