一、celery包结构
celery编写为包结构后,可以随意拔插到任意项目中使用,也是celery官方推荐写法。
第一步:
创建一个celery包
第二步:
创建celery.py(固定名字不能自定义)
from celery import Celery
backend = 'redis://127.0.0.1:6379/1' # 结果存储
broker = 'redis://127.0.0.1:6379/2' # 消息中间件
app = Celery('main', backend=backend, broker=broker,
include=['celery_task.seckill_task', # celery任务
'celery_task.get_result']) # 获取celery任务结果
#include中加入需要执行的celery任务
第三步:
创建celery任务(延迟任务、异步任务、定时任务)
seckill_task.py 秒杀任务
编写秒杀任务时如果有用到项目中的某些模块、代码需要将该项目导入到环境变量
import os,django
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'luffyapi.settings.dev')# project_name 项目名称
django.setup()
from celery_task.celery import app
from django_redis import get_redis_connection
@app.task
def seckill(shop_id, user_id):
redis = get_redis_connection()
name = 'seckill_table_' + shop_id
if redis.llen(name) <= 100:
redis.lpush(name, shop_id, user_id)
return True
else:
return False
get_result.py 获取celery任务结果
from celery_task.celery import app
from celery.result import AsyncResult
def result(id):
asy = AsyncResult(id=id, app=app)
if asy.successful(