django---celery异步配置以及定时任务

装包:

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'
settings
--__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

此时已经开启了三个终端  ~.~

 

posted @ 2020-08-05 14:21  ttoia  阅读(201)  评论(1编辑  收藏  举报