【Django】Celery定时任务

Celery

Celery是由Python开发的一个简单、灵活、可靠的处理大量任务的分发系统,它不仅支持实时处理也支持任务调度。

在这里插入图片描述

  • user:用户程序,用于告知celery去执行一个任务。
  • broker: 存放任务(依赖RabbitMQ或Redis,进行存储)
  • worker:执行任务

Django中应用Celery

下载

pip3 install django-celery-beat
pip3 install redis

写入配置

CELERY_BROKER_URL = 'redis://:密码@127.0.0.1:6800'
CELERY_ACCEPT_CONTENT = ['json']
CELERY_RESULT_BACKEND = 'redis://:密码@47.95.243.237:6800'
CELERY_TASK_SERIALIZER = 'json'

settings同级目录创建celery.py

import os
from celery import Celery
os.environ.setdefault('DJANGO_SETTINGS_MODULE', '项目名.settings')
app = Celery('项目名')
app.config_from_object('django.conf:settings', namespace='CELERY')
app.autodiscover_tasks()

settings同级__init__.py

from .celery import app as celery_app
__all__ = ('celery_app',)

app中创建tasks.py

import uuid
from celery import shared_task
@shared_task
def to_preview_status_task(auction_id):
  print("auction_id",auction_id)

view中调用

from django.shortcuts import render,HttpResponse
from . import tasks
from datetime import datetime
import time
# Create your views here.
def index(request):
    # 立即执行
    # result = tasks.to_preview_status_task.delay(1)
    tim = '2019-10-10 20:10:10'
    preview_utc_datetime =datetime.utcfromtimestamp(time.mktime(time.strptime(tim,"%Y-%m-%d %H:%M:%S")))
    # 定时执行
    result = tasks.to_preview_status_task.apply_async(args=[1], eta=preview_utc_datetime)
    # result = tasks.to_preview_status_task.apply_async(args='传参', eta='UTC时间')
    print(result.id) # 任务id
    print(result.status) # 任务状态
    result.revoke() # 删除任务
    result.revoke(terminate=True) # 强制删除任务

    return HttpResponse("200")

启动redis

启动项目

celery worker -A 项目名-l info
python manage.py runserver

可能出现的异常

ValueError: not enough values to unpack (expected 3, got 0)

解决:

# 安装eventlet
pip install eventlet
# 启动时:
celery worker -A 项目名-l info -P eventlet
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值