celery+redis的使用(异步任务、定时任务)

1 篇文章 0 订阅
1 篇文章 0 订阅

celery理解

celery是典型的生产者+消费者的模式,生产者生产任务并加入队列中,消费者取出任务消费。多用于处理异步任务或者定时任务。

安装celery+redis

pip install -i https://pypi.douban.com/simple celery
pip install -i https://pypi.douban.com/simple redis

异步任务使用

1.基础使用

新建task.py文件

from celery import Celery

app = Celery('demo', backend='redis://localhost:6379/1', broker='redis://localhost:6379/2')


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

此时相当于注册了celery app

在项目文件目录下执行python交互式编程

>>> from task import add
>>> res = add.delay(3,5)
>>> res.ready()
False
>>> res.get()

此处相当于是生产者,生产任务并交给broker

  • 使用add.delay(3,5)异步处理add函数,或者使用add.apply_async((3,5))
  • res.ready()可以查看任务是否完成
  • res.get()任务如果完成,可以获得任务返回结果;否则,一直阻塞,直到任务完成,然后返回结果

在项目文件目录下创建worker消费任务

celery -A task worker --loglevel=info
  • task 为注册celery app的py文件名字
  • 注意celery版本不同命令不同的问题
    在这里插入图片描述
    上面图片config中我们可以看到celery app名称以及broker和backend的设置
    并且这里立马消费了我们开始扔进redis的任务,可以回到我们的交互式编程查看结果已经被返回回来
    此时我们再扔进一个任务,可以看到结果可以马上返回
>>> res = add.delay(5,6)
>>> res.ready()
True
>>> res.get()
11
>>>

2.使用导入配置文件的方式

新建python包文件目录celery_study

在__init__.py文件中,我们注册celery app

from celery import Celery

app = Celery('demo')
# 通过celery实例获取配置
app.config_from_object('celery_study.celery_config')

新建配置文件celery_config.py

BROKER_URL = 'redis://localhost:6379/1'
CELERY_RESULT_BACKEND = 'redis://localhost:6379/2'

CELERY_TIMEZONE = 'Asia/Shanghai'

CELERY_IMPORTS = (
    'celery_study.task_add'
)

新建task_add.py文件书写需要异步的逻辑

import time
from celery_study import app


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

终端启动我们的worker

celery -A celery_study worker --loglevel=info

在这里插入图片描述
同样也可以看到celery正常启动

新建main.py文件并执行

from celery_study import task_add

task_add.add.delay(8, 4)
print('end...')

可以看到控制台输出了end...
在worker终端界面输出了
在这里插入图片描述

定时任务

修改celery_config.py

from datetime import timedelta
from celery.schedules import crontab

CELERYBEAT_SCHEDULE = {
    # 每10s执行一次
    'task1': {
        'task': 'celery_study.task_add.add',
        'schedule': timedelta(seconds=10),
        'args': (2, 8)
    },
    # 每天15:00执行
    'task2': {
        'task': 'celery_study.task_add.add',
        'schedule': crontab(hour=15, minute=0),
        'args': (9, 9)
    }
}

添加定时任务

1.分别启动worker和beat

启动worker

celery -A celery_study worker --loglevel=info

在这里插入图片描述

启动定时任务配置

celery -A celery_study beat --loglevel=info

在这里插入图片描述

2.同时启动worker和beat

celery -A celery_study worker --beat --loglevel=info

在这里插入图片描述

  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Celery是一个Python分布式任务队列,它可以帮助我们异步地执行任务,而且还可以定时执行任务。下面是使用Django的Celery框架来实现定时任务的执行的步骤: 1. 安装Celery。可以使用pip工具来安装Celery。 ```bash pip install celery ``` 2. 配置Django项目。在Django项目的settings.py文件中加入以下配置: ```python INSTALLED_APPS = [ # ... 'django_celery_results', 'django_celery_beat', # ... ] CELERY_BROKER_URL = 'redis://localhost:6379' CELERY_RESULT_BACKEND = 'django-db' CELERY_ACCEPT_CONTENT = ['application/json'] CELERY_RESULT_SERIALIZER = 'json' CELERY_TASK_SERIALIZER = 'json' ``` 其中,CELERY_BROKER_URL是指定Celery使用Redis作为消息代理,CELERY_RESULT_BACKEND是指定Celery的结果存储方式为Django数据库,CELERY_ACCEPT_CONTENT、CELERY_RESULT_SERIALIZER和CELERY_TASK_SERIALIZER则是指定消息的序列化方式。 3. 创建定时任务。在Django项目的tasks.py文件中定义需要定时执行的任务。例如: ```python from celery import shared_task @shared_task def hello(): print('Hello, World!') ``` 4. 配置定时任务。在Django项目的settings.py文件中加入以下配置: ```python CELERY_BEAT_SCHEDULE = { 'hello_task': { 'task': 'tasks.hello', 'schedule': 10.0, }, } ``` 其中,'hello_task'是任务的名称,'task'指定了任务的函数名,'schedule'则指定了任务的执行间隔时间。 5. 启动Celery。在Django项目的根目录下执行以下命令启动Celery: ```bash celery -A your_project_name worker -l info -B ``` 其中,-A参数指定了Celery要加载的Django项目的名称,-B参数表示启用定时任务。 6. 测试定时任务是否生效。等待10秒钟后,可以在控制台看到输出了'Hello, World!',表示定时任务已经成功执行。 以上就是使用Django的Celery框架来实现定时任务的执行的步骤。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值