Django Celery Redis 异步执行任务demo实例
一、windows中安装redis
安装过程见 《在windows x64上部署使用Redis》
二、环境准备
requirements.txt
Django==1.10.5
celery==3.1.23
redis==2.10.5
注意,celery 4.x 以上不支持windows
pip install -r requirements.txt
三、创建Django项目celery_proj,创建APP:celery_demo
>>django-admin startproject celery_proj
>>cd celery_proj
>>django-admin startapp celery_demo
四、添加celery相关配置信息
1.在celery_proj/celery_proj目录下,添加如下 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 'celery_proj' program.
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'celery_proj.settings')
app = Celery('celery_proj') # 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))
2.在celery_proj/celery_proj/__init__.py 中添加:
from .celery import app as celery_app
3.在项目配置文件中,如celery_proj/celery_proj/settings.py 中添加:
# CELERY STUFF
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 = 'Africa/Nairobi'
五、创建异步运行任务tasks
1.在APP目录下,如celery_proj/celery_demo目录下添加如下 tasks.py
#!/usr/bin/env python
# -*- coding: utf-8 -*- import time
from celery import task @task()
def add(x, y):
return x + y @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
2.在views视图中,添加相关视图,如celery_proj/celery_demo/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('')
print('after run_test_suit')
return HttpResponse("job is runing background~")
3.添加url映射,如修改 celery_proj/celery_proj/urls.py:
from django.conf.urls import url
from celery_demo import views urlpatterns = [
url(r'^', views.tasks, name='task'),
]
4.启动django server
>>python manage.py runserver
5.启动celery worker
>>celery -A celery_proj worker -l info
当显示如下,证明worker已启动成功:
E:\workspace\celery_proj>celery -A celery_proj worker -l info -------------- celery@WINDOWS-QKKYZQB v3.1.23 (Cipater)
---- **** -----
--- * *** * -- Windows--6.1.-SP1
-- * - **** ---
- ** ---------- [config]
- ** ---------- .> app: celery_proj:0x33fc190
- ** ---------- .> transport: redis://localhost:6379//
- ** ---------- .> results: redis://localhost:6379/
- *** --- * --- .> concurrency: (prefork)
-- ******* ----
--- ***** ----- [queues]
-------------- .> celery exchange=celery(direct) key=celery [tasks]
. celery_demo.tasks.add
. celery_demo.tasks.run_test_suit
. celery_proj.celery.debug_task [-- ::,: INFO/MainProcess] Connected to redis://localhost:6379//
注意:每当tasks.py 修改时,都要重新启动worker
6.访问浏览器:http://localhost:8000/
django控制台马上输出相关打印语句并且返回 HttpResponse 响应
但是实际上 run_test_suit 任务未完成,任务在后台运行 模拟sleep 10s后才完成,运行结果可通过celery worker 控制台输出中显示。

***微信扫一扫,关注“python测试开发圈”,了解更多测试教程!***
Django Celery Redis 异步执行任务demo实例的更多相关文章
- 使用django + celery + redis 异步发送邮件
参考:http://blog.csdn.net/Ricky110/article/details/77205291 环境: centos7 + python3.6.1 + django2.0.1 ...
- Celery+python+redis异步执行定时任务
我之前的一篇文章中写了[Celery+django+redis异步执行任务] 博文:http://blog.csdn.net/apple9005/article/details/54236212 你会 ...
- django celery redis 定时任务
0.目的 在开发项目中,经常有一些操作时间比较长(生产环境中超过了nginx的timeout时间),或者是间隔一段时间就要执行的任务. 在这种情况下,使用celery就是一个很好的选择. cele ...
- django+celery+redis实现运行定时任务
0.目的 在开发项目中,经常有一些操作时间比较长(生产环境中超过了nginx的timeout时间),或者是间隔一段时间就要执行的任务. 在这种情况下,使用celery就是一个很好的选择. cele ...
- django+celery+redis环境搭建
初次尝试搭建django+celery+redis环境,记录下来,慢慢学习~ 1.安装apache 下载httpd-2.0.63.tar.gz,解压tar zxvf httpd-2.0.63.tar. ...
- Django+Celery+redis kombu.exceptions.EncodeError:Object of type is not JSON serializable报错
在本文中例子中遇到问题的各种开发版本如下: Python3.6.8 Django==2.2 celery==4.4.0 kombu==4.6.7 redis==3.3.0 大概的报错如下截图: 是在开 ...
- Django+Celery+Redis实现异步任务(发送邮件)
安装如下依赖库 pip install Celery pip install django-celery pip install django-redis 还要安装本地的Redis服务 setting ...
- django -- Celery实现异步任务
1. 环境 python==2.7 djang==1.11.2 # 1.8, 1.9, 1.10应该都没问题 celery-with-redis==3.0 # 需要用到redis作为中间人服务(Bro ...
- django —— Celery实现异步和定时任务
1. 环境 python==2.7 djang==1.11.2 # 1.8, 1.9, 1.10应该都没问题 celery-with-redis==3.0 # 需要用到redis作为中间人服务(Bro ...
随机推荐
- IO流入门-第二章-FileOutputStream
FileOutputStreamj基本用法和方法示例 /* java.io.OutputStream java.io.FileOutputStream 文件字节输出流 将计算机内存中的数据写入到硬盘文 ...
- javascript教程5:--BOM操作
1.BOM 简介 所谓的 BOM 即浏览器对象模型(Browser Object Model).BOM 赋予了 JS 操作浏览器的能力,即 window 操作.DOM 则用于创建删除节点,操作 HTM ...
- 【我的Android进阶之旅】如何去除ListView中Header View、Footer View中的分割线
最近的项目中给ListView 加入了一个Header View之后,发现Header View的下方也有了分割线,很难看,UI要求将Header View的分割器去掉,好吧.现在就来说一说如何如何去 ...
- 商业模式画布模板——From 《商业模式新生代》
看过<商业模式新生代>这本书,确实受益匪浅.书籍本身编写的形式很新颖,以此为模板可以启发自己对于商业模式的思考和定义,五星推荐!!! 下面是用PPT重新绘制的商业模式画布以及说明,希望对大 ...
- df: `/root/.gvfs': Permission denied
在使用oracle账户检查本地磁盘情况时,总是出现df: `/root/.gvfs': Permission denied信息提示. [oracle@rac1 ~]$ df -h Filesystem ...
- 按钮js跳转到非表单提交页
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- gc摘要
1. Sun JDK 1.6 GC(Garbage Collector) http://bluedavy.com2010-05-13 V0.2 2010-05-19 V0.52010-06-01 V0 ...
- Spring中的定时调度(Scheduling)和线程池(Thread Pooling)
使用triggers和SchedulerFactoryBean来包装任务 我们已经创建了job details,jobs.我们同时回顾了允许你调用特定对象上某一个方法的便捷的bean. 当然我们仍需要 ...
- 单例模式及getInstance()的用法
一般在单例模式下使用.getInstance()创建对象:但并不是所有有私有构造方法,对外通过getInstance方法提供 实例的情况就是单例模式. 注:单例模式:一个类有且只有一个实例.1,一个私 ...
- CSS 控制元素 上下左右居中
不说废话,直接 搞起..... 首先,我们将题目 <css控制元素上下左右居中> 分析一下哈,我是将其分成了4部分信息: 1.CSS控制: 只用 CSS 来达成目的 2.元素: 不只是d ...