如何在Django项目中Django-Celery与芹菜

  介绍

如何在Django项目中Django-Celery与芹菜?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

首先简单介绍一下,芹菜是一个强大的分布式任务队列,它可以让任务的执行完全脱离主程序,甚至可以被分配到其他主机上运行。我们通常使用它来实现异步任务(异步任务)和定时任务(crontab)。它的架构组成如下图

如何在Django项目中Django-Celery与芹菜

可以看的到,芹菜主要包含以下几个模块:

任务模块任务

包含异步任务和定时任务,其中,异步任务通常在业务逻辑中被触发并发往任务队列,而定时任务由芹菜击败进程周期性地将任务发往任务队列。

消息中间件代理

代理,即为任务调度队列,接收任务生产者发来的消息(即任务),将任务存入队列.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与芹菜