celery+django+redis使用介绍

版本:

  • celery==3.1.25
  • django==1.8.6
  • redis==2.10.6

安装:

  • 进入虚拟环境(虚拟环境创建不同,进入方式不同)
  • pip install celery==3.1.25(以celery安装为例,其他安装方式相同)

运行环境:

  • window10(celery4.0以后不支持windows)
  • linux

目录结构:

  • 最外面的test1为项目名称
  • 里面的test1与app同级目录,里面都是一些配置(其中celery.py放在其中)。
  • app2为项目中的一个app
  • tasks.py在app2中,这个tasks.py只针对app2使用。若其他app也有celery任务。建立同样的文件名即可。

运行celery,需要的几个文件:

  • test1下的celery.py,代码如下(里面有介绍):

 1 from __future__ import absolute_import, unicode_literals
 2 import os
 3 from django.conf import settings
 4 from celery import Celery
 5
 6
 7 #设置 Django 的配置文件
 8 os.environ.setdefault(‘DJANGO_SETTINGS_MODULE‘, ‘test.settings‘)
 9
10 # 创建 celery 实例
11 app = Celery(‘test1‘)
12
13 # Using a string here means the worker will not have to
14 # pickle the object when using Windows.
15 app.config_from_object(‘django.conf:settings‘)
16
17 # 搜索所有 app 中的 tasks
18 app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)
19
20 @app.task(bind=True)
21 def debug_task(self):
22 print(‘Request: {0!r}‘.format(self.request))

  • test1下的settings.py,代码如下:

 1 """原来的django的settings内容"""
 2
 3 #celery config
 4 #消息中间件(使用redis),消息代理,用于发布者传递消息给消费者
 5 BROKER_URL = ‘redis://127.0.0.1:6379‘
 6 #消息结果返回中间件(使用redis),用于存储任务执行结果
 7 CELERY_RESULT_BACKEND = ‘redis://127.0.0.1:6379‘
 8 #允许的内容类型,
 9 CELERY_ACCEPT_CONTENT = [‘json‘]
10 #任务的序列化方式
11 CELERY_TASK_SERIALIZER = ‘json‘
12 #任务结果的序列化方式
13 CELERY_RESULT_SERIALIZER = ‘json‘
14 #celery时区,定时任务使用
15 CELERY_TIMEZONE = ‘Asia/Shanghai‘
16 from datetime import timedelta
17 #定时任务处理,使用的schedule,里面的task,写上任务的“路径”,schedule设置时间,args设置参数。
18 CELERYBEAT_SCHEDULE = {
19 ‘add_every_10_seconds‘: {
20 ‘task‘: ‘app2.tasks.add‘,
21 ‘schedule‘: timedelta(seconds=10),
22 ‘args‘: (4,4)
23 },
24 }

  • test1下的__init__.py,代码如下:

1 from __future__ import absolute_import
2 from .celery import app as celery_app
3 # 这是为了确保在django启动时启动 celery

  • app2下的tasks.py,这个tasks文件只针对该app2使用,其他app可以根据实际情况添加tasks.py文件,里面写相应的任务代码。代码如下:

1 # -*- coding:utf-8 -*-
2 from __future__ import absolute_import
3 from auto_model_platform.celery import app
4
5 @app.task
6 def add(x, y):
7     time.sleep(30)
8     print("running...", x, y)
9     return x + y

调用tasks.py内的函数:

  • 在app2.views.py中的某个视图函数中直接调用,比如调用tasks.py中的add(x,y)函数,这样调用。代码如下:

 1 from app2.tasks import add
 2
 3 class TestView(View):
 4      def get(self, request):
 5
 6     """其它逻辑"""
 7
 8     #celery处理的其它任务(异步处理),下面这个代码,celery会去处理,django直接执行下面的其它逻辑
 9     r = add.delay(x,y)
10     task_id = r.id
11
12      """其它逻辑"""
13
14     return JsonResponse({"data":"123"})

  • 通过task_id可以查询celery异步处理完的结果

 1 from test1.celery import app
 2 status = app.AsyncResult(task_id).status
 3 result = app.AsyncResult(task_id).result
 4
 5 #状态有这几种情况
 6 CELERY_STATUS = {
 7     ‘PENDING‘: ‘等待开始‘,
 8     ‘STARTED‘: ‘任务开始‘,
 9     ‘SUCCESS‘: ‘成功‘,
10     ‘FAILURE‘: ‘失败‘,
11     ‘RETRY‘: ‘重试‘,
12     ‘REVOKED‘: ‘任务取消‘,
13 }

服务器启动celery worker(消费者)任务,和定时任务:

  • 打开项目的虚拟环境,进入项目名称目录下,即跟app同一级目录下运行:
  • 定时任务:celery -A auto_model_platform worker -l info --beat
  • worker任务:celery -A auto_model_platform worker -l info

  

原文地址:https://www.cnblogs.com/sunweiyang/p/9817444.html

时间: 2024-10-09 23:25:58

celery+django+redis使用介绍的相关文章

Celery+python+redis异步执行定时任务

我之前的一篇文章中写了[Celery+django+redis异步执行任务] 博文:http://blog.csdn.net/apple9005/article/details/54236212 你会发现,这些代码并不依赖django框架,随便写到一个py文件中,就可以轻松的执行成功,这是因为这些代码并没有用到django-celery,django-redis等依附于django框架的东西. 今天,参照官方文档示例,测试一下celery的异步执行定时任务如何.我先是在django框架内执行了一

Django使用Celery加redis执行异步任务

简单使用 安装celery及redis 定义celery任务 项目下新建tasks.py from celery import Celery # 创建一个Celery类的实例对象 app = Celery('celery_task.tasks', broker='redis://127.0.0.1:6379/8') # 定义任务函数 @app.task def send_register_active_email(message): with open("D:\\celery\\text.txt

利用celery+django 在admin后台设置定时任务

经常用python开发web应用时,会涉及到定时任务的脚本,以前用linux自带的crontab来操作,但是感觉不太接地气,后来发现用celery+django 可以方便的实现! 安装软件环境如下: python 2.7.5 Django==1.8.2 celery==3.1.18 celery-with-redis==3.0 django-celery==3.1.16 MySQL-python==1.2.3 supervisor==3.1.3 使用pip方式安装完以上软件,并且默认系统已经安装

Redis学习一Redis的介绍与安装部署

NoSql 介绍 NoSql 是key-value形式存储,和传统的数据库不一样,不一定遵循传统数据库的一些基本要求,比如遵循SQL标准(insert\update\delete\select).ACID属性(原子性 一致性 隔离性 持久性).表结构等等,这些数据库有具有以下特点:非关系型的.分布式的.开源的.水平可扩展的. redis 的介绍 redis 是一个开源的,先进的key-value存储.它通常被称为数据结构服务器,因为键可以包含字符串(string).哈希(hash).链表(lis

NoSQL数据库之Redis数据库:Redis的介绍与安装部署

 NoSQL(NoSQL = Not Only SQL),它指的是非关系型的数据库.随着互联网web2.0网站的兴起,传统的关系数据库在应付web2.0网站,特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显的力不从心,暴露了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速的发展. NoSQL的特点: 特点一: 是以key-value形式存储,和传统的关系型数据库不一样,不一定遵循传统数据库的一些基本要求,比如说遵循SQL标准.ACID属性.表结构等等,这

Celery 和 Redis 入门

Reference:  http://www.thinksaas.cn/group/topic/395734/ Celery是一个广泛应用于网络应用程序的任务处理系统. 它可以在以下情况下使用: 在请求响应周期中做网络调用.服务器应当立即响应任何网络请求.如果在请求响应周期内需要进行网络调用,则应在周期外完成调用.例如当用户在网站上注册时,需要发送激活邮件.发送邮件是一种网络调用,耗时2到3秒.用户应该无需等待这2到3秒.因此,发送激活邮件应当在请求响应周期外完成,celery 就能实现这一点.

Linux 下 Redis使用介绍

出自http://blog.csdn.net/ajun_studio/article/details/6698147 和http://www.oschina.net/question/12_18065?sort=time Redis 是一个高性能的key-value数据库. redis的出现,很大程度补偿了memcached这类keyvalue存储的不足,在部 分场合可以对关系数据库起到很好的补充作用.它提供了Python,Ruby,Erlang,PHP,Java客户端,使用很方便. Redis

Django - Django框架 简单介绍

Django框架 简单介绍 本文地址: http://blog.csdn.net/caroline_wendy/article/details/29172271 1. 介绍 Django是一个开放源码的Web应用框架, 由Python写成. 採用了MVC的软件设计模式, 即模型M, 视图V和控制器C. 它最初是被开发来用于管理劳伦斯出版集团旗下的一些以新闻内容为主的站点的, 并于2005年7月在BSD许可证下公布. 这套框架是以比利时的吉普赛爵士吉他手Django Reinhardt来命名的.

redis基本介绍搭建篇

1.redis基本介绍 1.1 redis介绍 Redis属于非关系型数据库和Memcached类似,redis也是一个key-value型存储系统. 但redis支持的存储value类型相对更多,包括string(字符串).list(列表).set(集合)和zset(有序集合)等. 这些数据类型都支持push/pop.add/remove及取交集.并集和差集及更丰富的操作,而且这些操作都是原子性的.为了保证效率,redis的数据都是缓存在内存中. 区别是redis会周期性的把更新的数据写入磁盘