celery 组件在django环境应用

第一步安装

1
pip install celery==4.4

第二步 配置环境

1
2
3
4
5
6
# ############################# celery 配置连接redis #############################
#添加密码的
CELERY_BROKER_URL = 'redis://:foobared@127.0.0.1:6379/0'
CELERY_ACCEPT_CONTENT = ['json']
CELERY_RESULT_BACKEND = 'redis://:foobared@127.0.0.1:6379/0'
CELERY_TASK_SERIALIZER = 'json'

第三步   【项目/项目/celery.py】在项目同名目录创建 celery.py

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# 拒绝隐式引入,因为celery.py的名字和celery的包名冲突,需要使用这条语句让程序正确运行
from __future__ import absolute_import
import os
from celery import Celery
 
# set the default Django settings module for the 'celery' program.
 
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'auction.settings')
 
app =Celery('auction')
 
# Using a string here means the worker doesn't have to serialize
# the configuration object to child processes.
# - namespace='CELERY' means all celery-related configuration keys
#   should have a `CELERY_` prefix.
app.config_from_object('django.conf:settings',namespace='CELERY')
 
# Load task modules from all registered Django app configs.
# 去每个已注册app中读取 tasks.py 文件
app.autodiscover_tasks()

 第四步【项目/app名称/tasks.py】 

1
2
3
4
5
6
7
8
9
from celery import shared_task
 
@shared_task
def add(x, y):
    return x + y
 
@shared_task
def mul(x, y):
    return x * y

第五步 【项目/项目/__init__.py 

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

第六步 启动worker

1
2
3
进入项目目录
 
celery worker -A s -l info -P eventle

 第七步 编写视图函数,调用celery去创建任务

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
from django.shortcuts import HttpResponse
from api.tasks import x1
 
def create_task(request):
    print('请求来了')
    result = x1.delay(2,2)
    print('执行完毕')
    return HttpResponse(result.id)
 
 
def get_result(request):
    nid = request.GET.get('nid')
    from celery.result import AsyncResult
    # from demos.celery import app
    from demos import celery_app
    result_object = AsyncResult(id=nid, app=celery_app)
    # print(result_object.status)
    data = result_object.get()
    return HttpResponse(data)

  第八步 启动django程序

1
2
http://127.0.0.1:8000/api/get/task/?nid=68d4c97e-92e5-42e4-a04d-c1a8f35fb4a
http://127.0.0.1:8000/api/create/task/

  注意事项:

本地时间和URF实际转换:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Python3 :
    # 本地时间转换成utc时间
    utc_ctime = datetime.datetime.utcfromtimestamp(ctime.timestamp())
    target_time = utc_ctime + datetime.timedelta(seconds=10)
    result = x1.apply_async(args=[11, 3], eta=target_time)
     
python2 :
     
    # “”“本地时间转UTC时间(-8:00)”“”
     time_struct = time.mktime(ctime.timetuple())
     utc_st = datetime.datetime.utcfromtimestamp(time_struct)
 
 
 
     # utc_ctime = datetime.datetime.utcfromtimestamp(ctime.timestamp())
     target_time = utc_st + datetime.timedelta(seconds=30)

  

 

  

posted @   dayu2020  阅读(148)  评论(2编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示