Cerlery学习笔记

Celery 简介

Celery是一个异步任务的调度工具。 可以提供消息队列的后台执行方式,也可以提供跟进时间的计划任务。 官方文档 Celery 用消息通信,通常使用中间人(Broker)在客户端和职程间斡旋。这个过程从客户端向队列添加消息开始,之后中间人把消息派送给职程。

broker

是一个消息传输的中间件,异步程序调用celery任务的时候,会向broker传递消息,存储消息队列,之后worker进行消息的消费。

backend

用于存储这些消息以及celery的一下直接结果和执行信息。


使用celery需要三个条件

1.定义任务函数
2.运行celery服务
3.客户端程序调用
以下在Windows下测试通过

创建文件 tasks.py

from celery import Celery

broker = 'redis://127.0.0.1:6379/5'
backend = 'redis://127.0.0.1:6379/6'

# 指定任务名 tasks跟文件名一致
app = Celery('tasks', broker=broker, backend=backend)

# 创建任务函数
@app.task
def add(x, y):
    return x + y

运行命令:

celery -A tasks worker --loglevel=info

程序调用:

In [0]:from tasks import add
In [1]: r = add.delay(2, 2)
In [2]: add.delay(2, 2)
Out[2]: <AsyncResult: 6fdb0629-4beb-4eb7-be47-f22be1395e1d>
In [3]: r = add.delay(3, 3)
In [4]: r.ready()
Out[4]: True

定时任务

以上是celery的简单配置,重在理解原理,以下加入配置文件方式。 创建python包,命名为proj:

☁  proj  tree
.
├── __init__.py
├── celery.py             # 创建 celery 实例
├── config.py                # 配置文件
└── tasks.py                # 任务函数

celery.py

# -*- coding:utf-8 -*-

from __future__ import absolute_import
from celery import Celery

app = Celery('proj', include=['proj.tasks'])

app.config_from_object('proj.config')

if __name__ == '__main__':
    app.start()

config.py

# -*- coding:utf-8 -*-

from __future__ import absolute_import

CELERY_RESULT_BACKEND = 'redis://127.0.0.1:6379/5'
BROKER_URL = 'redis://127.0.0.1:6379/6'

tasks.py

# -*- coding:utf-8 -*-

from __future__ import absolute_import
from proj.celery import app

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

运行命令:

celery -A proj worker -l info

程序调用:

from proj.tasks import add
...
(同上)
Scheduler

每隔一段时间执行一次任务 config.py

# -*- coding:utf-8 -*-

from __future__ import absolute_import

CELERY_RESULT_BACKEND = 'redis://127.0.0.1:6379/5'
BROKER_URL = 'redis://127.0.0.1:6379/6'

CELERY_TIMEZONE = 'Asia/Shanghai'

from datetime import timedelta

CELERYBEAT_SCHEDULE = {
    'add-every-30-seconds': {
         'task': 'proj.tasks.add',    #这里注意路径
         'schedule': timedelta(seconds=30),
         'args': (16, 16)
    },
}

一旦使用了 scheduler, 启动 celery需要加上-B 参数在Windows下需要另开一个终端分别运行。

celery -A proj worker -l info

celery -A proj beat -s celerybeat-schedule
Crontab

config.py (未测试)

# -*- coding:utf-8 -*-

from __future__ import absolute_import

CELERY_RESULT_BACKEND = 'redis://127.0.0.1:6379/5'
BROKER_URL = 'redis://127.0.0.1:6379/6'

CELERY_TIMEZONE = 'Asia/Shanghai'

from celery.schedules import crontab

CELERYBEAT_SCHEDULE = {
    # Executes every Monday morning at 7:30 A.M
    'add-every-monday-morning': {
        'task': 'tasks.add',
        'schedule': crontab(hour=7, minute=30, day_of_week=1),
        'args': (16, 16),
    },
}

转载于:https://my.oschina.net/vhacker/blog/790300

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值