基本使用
# 第一步:定义一个py文件(名字随意,我们叫celery_tase)from celery import Celerybackend = 'redis://127.0.0.1:6379/1'broker = 'redis://127.0.0.1:6379/2'app = Celery(__name__,broker=broker,backend=backend)# 被它修饰,就变成了celery的任务@app.taskdef add(a,b): return a+b#第二步:提交任务(新建一个py文件:submit_task)from celery_task import add# 异步调用# 只是把任务提交到了redis中,但是没有执行,返回一个唯一标识,后期使用唯一标识去看任务执行结果res=add.delay(33,41)print(res)#第三步:启动worker#celery_task py文件的名字#-l info日志输出级别是info # -P eventlet 在win平台需要加上celery -A celery_task worker -l info -P eventlet#如果队列里有任务,就会执行,如果没有任务,worker就等在这# 第四步:查询结果是否执行完成from celery_task import appfrom celery.result import AsyncResultid = 'ed85b97a-a231-4d71-ba11-e5f6450d0b47'if __name__ == '__main__': a = AsyncResult(id=id, app=app) if a.successful(): result = a.get() print(result) elif a.failed(): print('任务失败') elif a.status == 'PENDING': print('任务等待中被执行') elif a.status == 'RETRY': print('任务异常后正在重试') elif a.status == 'STARTED': print('任务已经开始被执行')
8.2 包管理结构
1 包结构 celery_task __init__.py celery.py course_task.py home_task.py user_task.py2 celery.pyfrom celery import Celerybackend = 'redis://127.0.0.1:6379/1'broker = 'redis://127.0.0.1:6379/2'app = Celery(__name__, broker=broker, backend=backend, include=['celery_task.course_task', 'celery_task.user_task', 'celery_task.home_task'])3 home_task.pyfrom .celery import app@app.taskdef add(a,b): import time time.sleep(10) return a+b4 在任意项目中使用 -导入,之间使用,例如 def test(request): # 提交一个计算 90+80的任务 from celery_task.home_task import add res=add.delay(90,80) return HttpResponse('任务已经提,任务id为:%s'%str(res))