装包:
pip install celery #安装celery pip install eventlet #安装eventlet 协程
代码结构图:
django项目同名文件夹下创建celery.py 文件,app下创建tasks.py 文件
配置文件:settings ---- __init__.py ---- celery.py ---- tasks.py (文件位置可参考上图)
--settings.py-- #celery任务配置 UPLOAD_ROOT=os.path.join(BASE_DIR,'static/upload') CELERY_BROKER_URL='redis://127.0.0.1:6379/' CELERY_RESULT_BACKEND='redis://127.0.0.1:6379/' CELERY_RESULT_SERIALIZER='json'
--__init__.py-- #加入绝对引入这个新特性---absolute_import #将模块中显式出现的所有字符串转为unicode类型----unicode_literals from __future__ import absolute_import,unicode_literals from .celery import app as celery_app __all__=['celery_app']
----celery.py---- from __future__ import absolute_import,unicode_literals from celery import Celery import os #设置环境变量----对应自己的项目名(Celery_ttoia) os.environ.setdefault('DJANGO_SETTINGS_MODULE','Celery_ttoia.settings') #注册celery app=Celery('Celery_ttoia') #绑定配置文件 app.config_from_object('django.conf:settings',namespace="CELERY") #自动发现各个app下的tasks.py文件 app.autodiscover_tasks()
----tasks.py---- from celery.task import task #自定义异步任务 @task def aync_test(): print('异步任务') return '123'
----views.py---- #调用 from rest_framework.views import APIView from rest_framework.response import Response from app import tasks #导包 # Create your views here. class Dog(APIView): def post(self,request): res=tasks.aync_test.delay() #调用,delay print(res.id) print(666) return Response({'code':200,'msg':'666'})
启动celery异步任务:
第一步----要先去打开redis服务器,从setting中可以看到我们依赖redis实现异步任务。
第二部----启动项目,python manage.py runserver
第三步----启动celery异步,celery worker -A Celery_ttoia -l info -P eventlet (重开一个端口启动,包含manage.py的文件夹下--即项目同名文件夹)
----------------
定时任务的配置----settings.py
----settings.py---- from celery.schedules import crontab from datetime import timedelta CELERY_BEAT_SCHEDULE={ 'celery_work':{ 'task':'app.tasks.aync_test', #指定异步任务 'schedule':timedelta(seconds=20) #设置定期时间,每20秒启动一次任务 } }
----settings.py---- #每周启动一次 from celery.schedules import crontab from datetime import timedelta CELERY_BEAT_SCHEDULE={ 'celery_work':{ 'task':'app.tasks.aync_test', #指定异步任务 'schedule': crontab(hour=7.minute=30 ,day_of_week=1) #设置定期时间,每周一早7点30启动 } }
启动定时任务与启动异步任务相同,都需要在开启一个终端,celery -A Celery_ttoia beat -l info
此时已经开启了三个终端 ~.~