avatar

目录
celery

celery 简介

Celery 是一个专注于实时处理和任务调度的分布式任务队列, 同时提供操作和维护分布式系统所需的工具.. 所谓任务就是消息, 消息中的有效载荷中包含要执行任务需要的全部数据.

Celery 是一个分布式队列的管理工具, 可以用 Celery 提供的接口快速实现并管理一个分布式的任务队列.

Celery 本身不是任务队列, 是管理分布式任务队列的工具. 它封装了操作常见任务队列的各种操作, 我们使用它可以快速进行任务队列的使用与管理.

Celery 特性 :

方便查看定时任务的执行情况, 如 是否成功, 当前状态, 执行任务花费的时间等.

使用功能齐备的管理后台或命令行添加,更新,删除任务.
方便把任务和配置管理相关联.

可选 多进程, Eventlet 和 Gevent 三种模型并发执行.
提供错误处理机制.

提供多种任务原语, 方便实现任务分组,拆分,和调用链.
支持多种消息代理和存储后端.

Celery 是语言无关的.它提供了python 等常见语言的接口支持.

使用场景

异步任务:将耗时操作任务提交给Celery去异步执行,比如发送短信/邮件、消息推送、音视频处理等等

定时任务:定时执行某件事情,比如每天数据统计

Django中使用Celery

1、 在项目目录下创建celeryconfig.py

import djcelery
 djcelery.setup_loader()
 CELERY_IMPORTS=(
     'app01.tasks',
 )
 #有些情况可以防止死锁
 CELERYD_FORCE_EXECV=True
 # 设置并发worker数量
 CELERYD_CONCURRENCY=4
 #允许重试
 CELERY_ACKS_LATE=True
 # 每个worker最多执行100个任务被销毁,可以防止内存泄漏
 CELERYD_MAX_TASKS_PER_CHILD=100
 # 超时时间
   CELERYD_TASK_TIME_LIMIT=12*30

2、 在app01目录下创建tasks.py

from celery import task
@task
def add(a,b):
    with open('a.text', 'a', encoding='utf-8') as f:
        f.write('a')
    print(a+b)

3、 视图函数views.py

from django.shortcuts import render,HttpResponse
from app01.tasks import add
from datetime import datetime
def test(request):
    # result=add.delay(2,3)
    ctime = datetime.now()
    # 默认用utc时间
    utc_ctime = datetime.utcfromtimestamp(ctime.timestamp())
    from datetime import timedelta
    time_delay = timedelta(seconds=5)
    task_time = utc_ctime + time_delay
    result = add.apply_async(args=[4, 3], eta=task_time)
    print(result.id)
    return HttpResponse('ok')

4、 settings.py

#INSTALLED_APPS = [
#    'djcelery',
#    'app01'
#]

from djagocele import celeryconfig
BROKER_BACKEND='redis'
BOOKER_URL='redis://127.0.0.1:6379/1'
CELERY_RESULT_BACKEND='redis://127.0.0.1:6379/2'
文章作者: kuokay
文章链接: http://yoursite.com/2020/05/26/CELERY/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 kuokay
打赏
  • 微信
    微信
  • 支付寶
    支付寶

评论