Celery+redis实现异步

安装redis

sudo apt-get install redis-server

安装celery-with-redis

进入虚拟环境

source bin/active

pip 安装

pip install celery-with-redis

这一步会安装几个包 具体每个有什么用我也不知道 反正好用就行

添加celery相关配置

在项目配置目录下(即 settings.py 所在目录)添加 celery.py 文件

  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. from __future__ import absolute_import
  4. import os
  5. from celery import Celery
  6. from django.conf import settings
  7. # set the default Django settings module for the program.
  8. os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'project_name.settings')
  9. app = Celery('project_name') # 这里project_name填写项目名称, 注意不是app名称
  10. # Using a string here means the worker will not have to
  11. # pickle the object when using Windows.
  12. app.config_from_object('django.conf:settings')
  13. app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)
  14. @app.task(bind=True)
  15. def debug_task(self):
  16. print('Request: {0!r}'.format(self.request))

这样还不够, 还需要让python能够启动celery, 所以修改项目配置目录下(即 settings.py 所在目录)的 __init__.py 文件, 在其中添加

  1. from .celery import app as celery_app

同时, 还需在 settings.py 中添加

  1. BROKER_URL = 'redis://localhost:6379'
  2. CELERY_RESULT_BACKEND = 'redis://localhost:6379'
  3. CELERY_ACCEPT_CONTENT = ['application/json'] # 这个地方可以按照需求增加或改动
  4. CELERY_TASK_SERIALIZER = 'json'
  5. CELERY_RESULT_SERIALIZER = 'json'
  6. CELERY_TIMEZONE = TIME_ZONE # 使用settings.py中的时区

因为redis默认开的端口是6379, 没有更改配置的话就是这样配置

创建异步运行任务tasks.py

在app目录下创建tasks.py如下

  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. from __future__ import absolute_import, unicode_literals
  4. import time
  5. from celery import Celery
  6. from django.core.mail import send_mail, EmailMultiAlternatives, BadHeaderError
  7. from .models import common_member, common_member_email_send_time
  8. celery = Celery('tasks', broker='redis://localhost:6379/0')
  9. @celery.task
  10. def add(x, y):
  11. return x + y
  12. @celery.task
  13. def run_test_suit(ts_id):
  14. print("++++++++++++++++++++++++++++++++++++")
  15. print('jobs[ts_id=%s] running....' % ts_id)
  16. time.sleep(10.0)
  17. print('jobs[ts_id=%s] done' % ts_id)
  18. result = True
  19. return result
  20. # @celery.task
  21. # def send_email_1(msg):
  22. # msg.send()

这个地方我又按照廖雪峰的教程重新配置了celery, 可能有重复配置, 但是能用.

在 views.py 中添加相关视图

  1. from django.http import HttpResponse
  2. from .tasks import run_test_suit
  3. def tasks(request):
  4. print('before run_test_suit')
  5. result = run_test_suit.delay('110')
  6. print('after run_test_suit')
  7. return HttpResponse("job is runing background~")

注意用了delay方法, 这个方法是放在装饰器里面的.

添加urls.py

启动

  • 启动redis

    redis-server

  • 启动celery

    celery -A project_name worker -l info

    启动celery后, 在终端可以看到celery的log信息, 对于debug很有帮助

  • 启动django

    python manage.py runserver

Celery+redis实现异步的更多相关文章

  1. Django+Celery+Redis实现异步任务(发送邮件)

    安装如下依赖库 pip install Celery pip install django-celery pip install django-redis 还要安装本地的Redis服务 setting ...

  2. django celery redis 定时任务

    0.目的 在开发项目中,经常有一些操作时间比较长(生产环境中超过了nginx的timeout时间),或者是间隔一段时间就要执行的任务. 在这种情况下,使用celery就是一个很好的选择.   cele ...

  3. django+celery+redis实现运行定时任务

    0.目的 在开发项目中,经常有一些操作时间比较长(生产环境中超过了nginx的timeout时间),或者是间隔一段时间就要执行的任务. 在这种情况下,使用celery就是一个很好的选择.   cele ...

  4. Django+Celery+xadmin实现异步任务和定时任务

    Django+Celery+xadmin实现异步任务和定时任务 关注公众号"轻松学编程"了解更多. 一.celery介绍 1.简介 [官网]http://www.celerypro ...

  5. python celery + redis

    redis http://debugo.com/python-redis celery http://docs.jinkan.org/docs/celery/getting-started/intro ...

  6. django+celery+redis环境搭建

    初次尝试搭建django+celery+redis环境,记录下来,慢慢学习~ 1.安装apache 下载httpd-2.0.63.tar.gz,解压tar zxvf httpd-2.0.63.tar. ...

  7. celery + redis quick start

    软件: redis server redis-server.exe 安装redis for python using pip 安装celery (redis)  pip install -U &quo ...

  8. Django中Celery http请求异步处理(四)

    Django中Celery http请求异步处理 本章延续celery之前的系列 1.settings配置 2.编写task jib_update_task任务为更新salt jid数据 3.url设 ...

  9. redis实现异步任务队列

    redis实现异步任务队列 先说思路: 将任务对象序列为JSON字符串,然后推入REDIS缓存,这叫入队. 通过独立的工作线程从REDIS拉出一个任务,这叫出队,工作线程将JSON字符串还原为任务对象 ...

随机推荐

  1. JS原型与原型链(好文看三遍)

    一. 普通对象与函数对象 JavaScript 中,万物皆对象!但对象也是有区别的.分为普通对象和函数对象,Object ,Function 是JS自带的函数对象. 下面举例说明: function ...

  2. Android多渠道打包工具

    http://www.cnblogs.com/huangtianhui/archive/2012/07/14/2591382.html 鉴于Android市场众多,基于各种利益考虑,以及未来app能够 ...

  3. 用.net 2.0(或.net 3.5)开发的程序在.net 4.0的环境中运行的解决方案

    引用:.NET2.0程序集无法在.net 4.0 中运行的解决方案 1. 原来是在.net 2.0 (VS2008)的环境下的程序,通过升级到.net 4.0 (VS2013)导致程序运行不了 提示需 ...

  4. OpenGL初识

    OpenGL 概念 OpenGL提供的是一系列接口, 它是指一个规范, OpenGL规范严格规定了每个函数该如何执行, 以及它们的输出值, 具体的实现是由各个显示设备厂商, 它作为本地系统库直接运行在 ...

  5. url模块学习小结

    url模块是node自带的功能强大的url解析库. var url = require("url"); var str = "http://192.168.0.109:8 ...

  6. ElasticSearch基础入门

    1.query查询表达式 Elasticsearch 提供一个丰富灵活的查询语言叫做 查询表达式 , 查询表达式(Query DSL)是一种非常灵活又富有表现力的 查询语言,它支持构建更加复杂和健壮的 ...

  7. ASP.NET MVC4 新手入门教程之二 ---2.添加控制器

    MVC 代表 模型-视图-控制器.MVC 是一个模式用于开发应用程序是很好的架构. 可检验性和易于维护.基于 MVC 的应用程序包含: Models: 类表示应用程序的数据并使用验证逻辑以执行这些数据 ...

  8. css三栏布局方案整理

    日常开发中,经常会用到css三栏布局,现将工作中常用的css 三栏布局整理如下: 什么是三栏布局: 三栏布局,顾名思义就是两边固定,中间自适应. 一. float布局 <!DOCTYPE htm ...

  9. 怎么让textarea的光标靠左对齐

    1.怎么让textarea的光标靠左对齐: 把<textarea></textarea>之间空隙去掉就可以了. 2.怎么限制textarea的字数,利用maxlength属性限 ...

  10. 360浏览器内核控制标签meta说明

    浏览器内核控制标签meta说明 背景介绍 由于众所周知的原因,国内的主流浏览器都是双核浏览器:基于Webkit的内核用于常用网站的高速浏览,基于IE的内核主要用于部分网银.政府.办公系统等网站的正常使 ...