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 文件

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

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

from .celery import app as celery_app

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

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

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

创建异步运行任务tasks.py

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

#!/usr/bin/env python
# -*- coding: utf-8 -*-
from __future__ import absolute_import, unicode_literals
import time
from celery import Celery
from django.core.mail import send_mail, EmailMultiAlternatives, BadHeaderError
from .models import common_member, common_member_email_send_time celery = Celery('tasks', broker='redis://localhost:6379/0') @celery.task
def add(x, y):
return x + y @celery.task
def run_test_suit(ts_id):
print("++++++++++++++++++++++++++++++++++++")
print('jobs[ts_id=%s] running....' % ts_id)
time.sleep(10.0)
print('jobs[ts_id=%s] done' % ts_id)
result = True
return result # @celery.task
# def send_email_1(msg):
# msg.send()

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

在 views.py 中添加相关视图

from django.http import HttpResponse
from .tasks import run_test_suit def tasks(request):
print('before run_test_suit')
result = run_test_suit.delay('110')
print('after run_test_suit')
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. 移动端手势事件 hammer.JS插件

                      一.引入hammer.JS 1.下载地址:http://download.csdn.net/detail/webxiaoma/9872249 2.官网地址:http ...

  2. Change - Why we need coding standards

    Change - Why we need coding standards I have the idea of coding standards when I have to review my t ...

  3. java gc 随记

    gc为garbage collection的缩写,中文翻译为垃圾回收.垃圾为不在使用的实例.变量,回收为释放垃圾所占用的内存空间. 学习过的C语言.C++语言,是没有垃圾回收机制的,因此需要软件工程师 ...

  4. SSH框架整合中Hibernate实现Dao层常用结构

    一.疑惑 一直以来,我在使用SSH框架的时候经常会发现后者有疑虑到底使用hibernate的那种方法或者如何配置hibernate来操作数据库,经过 一段时间的学习下面我来总结一下,常用的dao层配置 ...

  5. CF Dima and To-do List

    B. Dima and To-do List time limit per test 1 second memory limit per test 256 megabytes input standa ...

  6. 十一 Pipe

    Java NIO 管道是2个线程之间的单向数据连接.Pipe有一个source通道和一个sink通道.数据会被写到sink通道,从source通道读取. 创建管道 通过Pipe.open()方法打开管 ...

  7. Cardinality Estimation算法学习(二)(Linear Counting算法、最大似然估计(MLE))

    在上篇,我了解了基数的基本概念,现在进入Linear Counting算法的学习. 理解颇浅,还请大神指点! http://blog.codinglabs.org/articles/algorithm ...

  8. VS编译优化

    程序的调试是任何一个程序必做的“功课”,当然在调试的过程中肯定会或多或少的遇到一些问题.如果每次关掉,修改,然后在启动,浪费不少时间和经历,尤其是在不确定的情况下尝试修改,启动的次数会更多.如果你要调 ...

  9. crontab 切割日志

    cutlog.sh #!/bin/sh source /etc/profile D=$(date "+%Y%m%d%H%M%S") mv "/usr/local/Cell ...

  10. Angular-ui/bootstarp modal 主控制器与模态框控制器传值

    调用模态框: $scope.open = function (size) { //这里很关键,是打开模态框的过程 var modalInstance = $uibModal.open({ animat ...