celery 简单示例

目录结构

 

 

 第一步  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  目录下执行
posted @ 2020-10-13 16:18  小学弟-  阅读(354)  评论(2编辑  收藏  举报