标签:end strong 一级目录 时区 efault style serial ring play
版本:
安装:
运行环境:
目录结构:
运行celery,需要的几个文件:
1 from __future__ import absolute_import, unicode_literals 2 import os 3 from django.conf import settings 4 from celery import Celery 5 6 7 #设置 Django 的配置文件 8 os.environ.setdefault(‘DJANGO_SETTINGS_MODULE‘, ‘test.settings‘) 9 10 # 创建 celery 实例 11 app = Celery(‘test1‘) 12 13 # Using a string here means the worker will not have to 14 # pickle the object when using Windows. 15 app.config_from_object(‘django.conf:settings‘) 16 17 # 搜索所有 app 中的 tasks 18 app.autodiscover_tasks(lambda: settings.INSTALLED_APPS) 19 20 @app.task(bind=True) 21 def debug_task(self): 22 print(‘Request: {0!r}‘.format(self.request))
1 """原来的django的settings内容""" 2 3 #celery config 4 #消息中间件(使用redis),消息代理,用于发布者传递消息给消费者 5 BROKER_URL = ‘redis://127.0.0.1:6379‘ 6 #消息结果返回中间件(使用redis),用于存储任务执行结果 7 CELERY_RESULT_BACKEND = ‘redis://127.0.0.1:6379‘ 8 #允许的内容类型, 9 CELERY_ACCEPT_CONTENT = [‘json‘] 10 #任务的序列化方式 11 CELERY_TASK_SERIALIZER = ‘json‘ 12 #任务结果的序列化方式 13 CELERY_RESULT_SERIALIZER = ‘json‘ 14 #celery时区,定时任务使用 15 CELERY_TIMEZONE = ‘Asia/Shanghai‘ 16 from datetime import timedelta 17 #定时任务处理,使用的schedule,里面的task,写上任务的“路径”,schedule设置时间,args设置参数。 18 CELERYBEAT_SCHEDULE = { 19 ‘add_every_10_seconds‘: { 20 ‘task‘: ‘app2.tasks.add‘, 21 ‘schedule‘: timedelta(seconds=10), 22 ‘args‘: (4,4) 23 }, 24 }
1 from __future__ import absolute_import 2 from .celery import app as celery_app 3 # 这是为了确保在django启动时启动 celery
1 # -*- coding:utf-8 -*- 2 from __future__ import absolute_import 3 from auto_model_platform.celery import app 4 5 @app.task 6 def add(x, y): 7 time.sleep(30) 8 print("running...", x, y) 9 return x + y
调用tasks.py内的函数:
1 from app2.tasks import add 2 3 class TestView(View): 4 def get(self, request): 5 6 """其它逻辑""" 7 8 #celery处理的其它任务(异步处理),下面这个代码,celery会去处理,django直接执行下面的其它逻辑 9 r = add.delay(x,y) 10 task_id = r.id 11 12 """其它逻辑""" 13 14 return JsonResponse({"data":"123"})
1 from test1.celery import app 2 status = app.AsyncResult(task_id).status 3 result = app.AsyncResult(task_id).result 4 5 #状态有这几种情况 6 CELERY_STATUS = { 7 ‘PENDING‘: ‘等待开始‘, 8 ‘STARTED‘: ‘任务开始‘, 9 ‘SUCCESS‘: ‘成功‘, 10 ‘FAILURE‘: ‘失败‘, 11 ‘RETRY‘: ‘重试‘, 12 ‘REVOKED‘: ‘任务取消‘, 13 }
服务器启动celery worker(消费者)任务,和定时任务:
标签:end strong 一级目录 时区 efault style serial ring play
原文地址:https://www.cnblogs.com/sunweiyang/p/9817444.html