一、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实例的更多相关文章

  1. 使用django + celery + redis 异步发送邮件

    参考:http://blog.csdn.net/Ricky110/article/details/77205291 环境: centos7  +  python3.6.1 + django2.0.1  ...

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

    我之前的一篇文章中写了[Celery+django+redis异步执行任务] 博文:http://blog.csdn.net/apple9005/article/details/54236212 你会 ...

  3. django celery redis 定时任务

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

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

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

  5. django+celery+redis环境搭建

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

  6. 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 大概的报错如下截图: 是在开 ...

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

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

  8. django -- Celery实现异步任务

    1. 环境 python==2.7 djang==1.11.2 # 1.8, 1.9, 1.10应该都没问题 celery-with-redis==3.0 # 需要用到redis作为中间人服务(Bro ...

  9. django —— Celery实现异步和定时任务

    1. 环境 python==2.7 djang==1.11.2 # 1.8, 1.9, 1.10应该都没问题 celery-with-redis==3.0 # 需要用到redis作为中间人服务(Bro ...

随机推荐

  1. 一.数据库连接对象connection

    1.python 3.5,需要把MySQLdb换成pymysql

  2. 浅谈REDIS数据库的键值设计(转)

    add by zhj: 关系数据库表的一条记录可以映射成Redis中的一个hash类型,其实数据库记录本来就是键值对.这样,要比本文中的键设计用更少的键,更节省内存,因为每个键除了它的键值占用内存外, ...

  3. 深入理解CNI

    1.为什么会有CNI? CNI是Container Network Interface的缩写,简单地说,就是一个标准的,通用的接口.已知我们现在有各种各样的容器平台:docker,kubernetes ...

  4. linux虚拟机连不上网络

    1.修改文件ifcfg-ens33 # 切换目录 [root@localhost ~]# cd /etc/sysconfig/network-scripts/ # 将ONBOOT修改为yes [roo ...

  5. Django页面重定向

    重定向分为永久性重定向和暂时性重定向,在页面上体现的操作就是浏览器会从一个页面自动跳转到另外一个页面.比如用户访问了一个需要权限的页面,但是该用户当前并没有登录,因此我们应该给他重定向到登录页面. 永 ...

  6. *.hbm.xml映射文件的元素及属性

    1. 每个持久化对象都需要提供一个以类名命名的映射文件,映射文件需要放在和po类同一目录下. 2. 如下是wefepo的映射文件: <hibernate-mapping> <clas ...

  7. Android图片加载框架之Picasso

    相信做Android开发的对Square公司一定不会陌生,大名鼎鼎的网络请求框架Retrofit就来源于它,今天学习的是该公司出品的图片加载框架Picasso. 项目地址 https://github ...

  8. Mysql学习笔记—索引

    一.什么是索引 一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,遇到最多的,也是最容易出问题的,还是一些复杂的查询操作,所以查询语句的优化显然是重中之重. 在数据 ...

  9. s5_day4作业

    # #流程控制练习题: # #==========>基础部分 # #练习一: # if True or False and False: # print('yes') # else: # pri ...

  10. jsp验证正则表达式

    jsp验证正则表达式 下面都是我收集的一些比较常用的正则表达式,因为平常可能在表单验证的时候,用到的比较多.特发出来,让各位朋友共同使用.呵呵. 匹配中文字符的正则表达式: [u4e00-u9fa5] ...