django 的分布式实现

149 阅读1分钟

使用celery和redis配合实现异步任务队列 默认已经安装celery和django以及redis并且已经redis已经配置好 创建好自己的django工程 在工程中的setting.py文件中配置celery

import djcelery  ###
djcelery.setup_loader()  ###
CELERY_TIMEZONE='Asia/Shanghai' 
BROKER_URL='redis://127.0.0.1:16379'  
CELERYBEAT_SCHEDULER = 'djcelery.schedulers.DatabaseScheduler'  ###

在自己项目下添加celery.py

#!/usr/bin/env python3
# -*- coding:utf-8 -*-
from __future__ import absolute_import, unicode_literals
import os
from celery import Celery
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'app名.settings')
app = Celery('app名')
app.config_from_object('django.conf:settings', namespace='CELERY')
app.autodiscover_tasks()

修改app下的init.py

#!/bin/python
from __future__ import absolute_import
from .celery import app as celery_app

在tasks.py 添加tesk

from celery import task
from celery import shared_task
@task()
def add(x, y):
    return x + y
@shared_task
def mul(x, y):
    return x * y

在接口函数中实现

from django.http import JsonResponse
from app名 import tasks
def index(request,*args,**kwargs):
    res=tasks.add.delay(1,3)
    #任务逻辑
    return JsonResponse({'status':'successful','task_id':res.task_id})

启动celery

python manage.py runserver 0.0.0.0:8001
python manage.py celery beat 
python manage.py  celery worker -c 6 -l debug