Django2.2中使用celery

Django2.2中使用celery

1.启动Redis
win10 下pip install eventlet否则报错
2.在settings中添加

CELERY_BROKER_URL = 'redis://localhost:6379/0'
CELERY_RESULT_BACKEND = 'redis://localhost:6379/1'
CELERY_ACCEPT_CONTENT = ['application/json']
CELERY_RESULT_SERIALIZER = 'json'
CELERY_TASK_SERIALIZER = 'json'
CELERY_TIMEZONE = 'Asia/Shanghai'

3.在项目同名目录下创建celery.py

import os
from celery import Celery

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'xadmin_test.settings')  # 设置django环境

app = Celery('xadmin_test')

# 这里使用字符串以使celery的worker不用为子进程序列化配置对象。
# 命名空间 namespace='CELERY'定义所有与celery相关的配置的键名要以'CELERY_'为前缀。
app.config_from_object('django.conf:settings', namespace='CELERY') 

# 从所有django app configs中加载task模块,
# 如果你把所有的task都定义在单独的tasks.py模块中,
# 加上这句话celery会自动发现这些模块中的task,实际上这句话可以省略。
app.autodiscover_tasks()       # 发现任务文件每个app下的task.py

4.init.py

from xadmin_test.celery import app as celery_app

__all__ = ('celery_app',)

5.在app中创建task.py

from celery import shared_task
import time,datetime


@shared_task
def wait_pay(order_id):
    # now = datetime.datetime.now()
    # days = datetime.timedelta(days=1)
    # end_time = now + days
    test_num = int(order_id) + 100
    time.sleep(10)
    return test_num

6.在views中调用

def celery_test(request):
    res = tasks.wait_pay.delay(10)
    utc_time = datetime.datetime.utcfromtimestamp(执行时间.timestamp())
    res = tasks.wait_pay.apply_async(args=[10],eta=utc_time)
    return JsonResponse({'task_id':res.id})
res.get()  #获得结果
res.revoke() #取消
res.remove() #删除
from celery.result import AsyncResult
res=AsyncResult("62051878-ca77-4895-a61f-6f9525681347") # 参数为task id
res.result

7.项目启动

celery worker: celery worker -A proName -l info -P eventlet
启动Django

Django在项目启动时加载文件

from django.utils.module_loading import autodiscover_modules
autodiscover_modules('xx'
  • Django加载流程

    加载app-->autodiscover_modules-->自动发现xx.py
    

task和share_task的区别

task:

​ 将函数当作celery的任务函数

share_task:

​ 自动与所有Celery对象绑定

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值