如何在Django项目中Django-Celery与芹菜?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。
首先简单介绍一下,芹菜是一个强大的分布式任务队列,它可以让任务的执行完全脱离主程序,甚至可以被分配到其他主机上运行。我们通常使用它来实现异步任务(异步任务)和定时任务(crontab)。它的架构组成如下图
可以看的到,芹菜主要包含以下几个模块:
任务模块任务
包含异步任务和定时任务,其中,异步任务通常在业务逻辑中被触发并发往任务队列,而定时任务由芹菜击败进程周期性地将任务发往任务队列。
消息中间件代理
代理,即为任务调度队列,接收任务生产者发来的消息(即任务),将任务存入队列.Celery本身不提供队列服务,官方推荐使用RabbitMQ和复述,等。
任务执行单元职工
职工是执行任务的处理单元,它实时监控消息队列,获取队列中调度的任务,并执行它。
任务结果存储后台
后台用于存储任务的执行结果,以供查询。同消息中间件一样,存储也可使用RabbitMQ,复述和MongoDB等。
异步任务
使用芹菜实现异步任务主要包含三个步骤:
- <李>
创建一个芹菜实例
李> <李>启动芹菜工人
李> <李>应用程序调用异步任务
李>一、快速入门
本地环境:
- <李>
操作系统:centOS6.5
李> <李>Django - 1.9
李> <李>python-2.7.11
李> <李>芹菜==3.1.20
李> <李>Django-Celery
李>python,皮普,Django相关安装不在详写,直接参考百度即可。
pip install Django==1.9,,,安装django pip install 芹菜==3.1.20 安装芹菜 pip install  django-celery ,安装django-celery
安装如果有失败,所需要的依赖环境自行解决,例如:mysql-python等;
使用做复述,作为消息中间件,安装复述:https://www.jb51.net/article/96230.htm
二、创建django项目开始测试
1,创建django工程命名为djtest
django-admin.py startproject djtest1
2,创建应用命名为应用
cd djtest python manage.py  startapp apps1
3,创建完成后,django目录结构如下:
djtest1 ├──apps1 │,├──admin.py │,├──apps.py │,├──init.py │,├──迁移 ││祝福;└──,init.py │,├──models.py │,├──tests.py │,└──views.py ├──djtest1 │,├──init.py │,├──init.pyc │,├──settings.py │,├──settings.pyc │,├──urls . py │,└──wsgi.py └──,jobs
4,修改设置。py django配置文件,增加如下:
import djcelery # # # djcelery.setup_loader () # # # CELERY_TIMEZONE=& # 39;亚洲/上海# 39;,#并没有北京时区,与下面TIME_ZONE应该一致 BROKER_URL=& # 39;复述://192.168.217.77:16379/8& # 39;,#任何可用的复述,都可以,不一定要在django 服务器运行的主机上 时间=CELERYBEAT_SCHEDULER & # 39; djcelery.schedulers.DatabaseScheduler& # 39; # # # , INSTALLED_APPS =, ( & # 39;才能django.contrib.admin& # 39; & # 39;才能django.contrib.auth& # 39; & # 39;才能django.contrib.contenttypes& # 39; & # 39;才能django.contrib.sessions& # 39; & # 39;才能django.contrib.messages& # 39; & # 39;才能django.contrib.staticfiles& # 39; & # 39;才能djcelery& # 39;,,, # # #,加入djcelery应用 & # 39;才能apps1& # 39;,,,, # # #,,,加入新创建的apps1 ) TIME_ZONE=& # 39;亚洲/上海# 39;,# # #
开头增加如上配置文件,根据实际情况配置复述的地址和端口,时区一定要设置为<代码>亚洲/上海> 代码。否则时间不准确回影响定时任务的运行。
上面代码首先导出djcelery模块,并调用setup_loader方法加载有关配置;注意配置时区,不然默认使用UTC时间会比东八区慢8个小时。其中INSTALLED_APPS末尾添加两项,分别表示添加芹菜服务和自己定义的应用服务。
5,编写芹菜文件:djtest/djtest/芹菜。py
# !/bin/python 得到__future__ import  absolute_import , import 操作系统 , 得到celery import 芹菜 , os.environ.setdefault (& # 39; DJANGO_SETTINGS_MODULE& # 39;,, & # 39; djtest1.settings& # 39;) # Specifying 从而settings here  means 从而celery command line program will 知道where your Django project 又是; #却;能够statement must always  appear before 从而app instance is 创建,which is what do 下:我方表示歉意, 得到django.conf import 设置 , app =,芹菜(& # 39;djtest1& # 39;) , app.config_from_object (& # 39; django.conf:设置# 39;) #却;能够means that 你不要# 39;t have 用use multiple configuration 文件,以及instead configure Celery directly 得到,Django 设置。 #你还要pass 从而object directly 在这里,,but using a string is better since then 从而worker 并# 39;t have 用serialize 从而对象。 , app.autodiscover_tasks(λ:settings.INSTALLED_APPS) # With 从而line above  Celery will automatically discover tasks 拷贝reusable apps if 你define all tasks 拷贝a separate tasks.py 模块。 null null null null null null null null null null null null null null null null null null null null如何在Django项目中Django-Celery与芹菜