Django异步与定时任务Celery

将任务分配给其他的进程去运行,django的主进程只负责发起任务,而执行任务的不在使用django的主进程。Python有一个很棒的异步任务框架,叫做celery。

Django为了让开发者开发更加方便,集成了celery,形成了django-celery插件

1.安装django-celery

#Redis模块的兼容不稳定,必须安装2.10.6
pip install django-celery 
pip install django-redis 
pip install redis==2.10.6

 django-celery只是将任务发布出去,让长时间的任务:爬取一个网站,发送一个验证码这样的工作,不再阻塞主线程,web服务器只负责发起任务和接受任务的结果,中间执行的部分交给其他线程、进程、服务器去做。

2.安装redis

Celery异步任务

1、在settings当中配置django-celery

在settings.py 配置

# celery 设置
# celery中间人 redis://redis服务所在的ip地址:端口/数据库号
BROKER_URL = 'redis://192.168.124.128:6379/3'
# celery结果返回,可用于跟踪结果
CELERY_RESULT_BACKEND = 'redis://192.168.124.128:6379/3'
# celery内容等消息的格式设置
CELERY_ACCEPT_CONTENT = ['application/json', ]
CELERY_TASK_SERIALIZER = 'json'
CELERY_RESULT_SERIALIZER = 'json'
# celery时区设置,使用settings中TIME_ZONE同样的时区
CELERY_TIMEZONE = TIME_ZONE

在项目的主目录下,编写celery的控制文件,(控制文件的名字最好是celery)

 celery.py

import os
from celery import Celery
from django.conf import settings

# 设置celery的环境变量和django-celery的工作目录
os.environ.setdefault("DJANGO_SETTINGS_MODULE","celery_pro.settings")
# 实例化celery应用,传入服务器名称
app = Celery("app01")
# 加载celery配置
app.config_from_object("django.conf:settings")

# 如果在项目中,创建了task.py,那么celery就会沿着app去查找task.py来生成任务
app.autodiscover_tasks(lambda :settings.INSTALLED_APPS)

2.新建tasks.py在app01下

from __future__ import absolute_import
from celery_pro.celery import app

@app.task
def add(x,y):
    return x+y

 3.然后为了djcelery进行数据库同步

python manage.py check
python manage.py makemigrations
python manage.py migrate

.编写视图触发异步任务

 

posted @ 2021-12-23 21:43  王竹笙  阅读(299)  评论(1编辑  收藏  举报