在django中使用celery

前言: 针对高延时任务, 直接在一次网络请求中处理完毕会导致很不好的体验, celery则可以不阻塞请求后台处理这些任务, 并且可以使用django的models进行数据库操作.

环境

python models:

  • celery-4.1.1
  • redis-2.10.6
  • django-1.11.7

其他:

  • redis-3.2.9
  • macos
  • python3.6

创建django工程

django-admin startproject dc
cd dc
django-admin startapp main

此时项目结构如下

dc
|-- __init__.py
|-- main
|   |-- __init__.py
|   |-- admin.py
|   |-- apps.py
|   |-- migrations
|   |   `-- __init__.py
|   |-- models.py
|   |-- tests.py
|   `-- views.py
|-- settings.py
|-- urls.py
`-- wsgi.py

修改settings.py, 添加app

INSTALLED_APPS = ['django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles','dc.main' //new added
]

修改dc/main/models.py, 创建新models

from django.db import models# Create your models here.class Person(models.Model):first_name = models.CharField(max_length=30)last_name = models.CharField(max_length=30)

创建根访问节点

dc/main/views.py

from django.shortcuts import render
from django.http import HttpResponse
# Create your views here.def hello(request):return HttpResponse('hello world')

dc/urls.py

urlpatterns = [url(r'^admin/', admin.site.urls),url(r'^$', hello) //new added
]

依次执行以下语句, 初始化django各功能模块

python manage.py migrate
python manage.py makemigrations main
python manage.py sqlmigrate main 0001
python manage.py migrate

接下来python manage.py runserver, 访问http://127.0.0.1:8000 即可看到hello world.

启动redis

redis是作为celery中间件使用的, 用来存储消息队列.

redis解压后, 直接运行src/redis-server即可启动, 默认端口6379

配置celery

参考文档

创建dc/celery.py

#-*- coding:utf-8 -*-import os
from celery import Celery# set the default Django settings module for the 'celery' program.
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'dc.settings')app = Celery('dc')# Using a string here means the worker doesn't have to serialize
# the configuration object to child processes.
# - namespace='CELERY' means all celery-related configuration keys
#   should have a `CELERY_` prefix.
app.config_from_object('django.conf:settings', namespace='CELERY')# Load task modules from all registered Django app configs.
app.autodiscover_tasks()

修改 dc/__init__.py

from .celery import app as celery_app__all__ = ['celery_app']

修改 dc/settings.py, 设定 redis URL

CELERY_BROKER_URL = 'redis://127.0.0.1:6379/3'

创建dc/main/tasks.py

#-*- coding:utf-8 -*-from celery import shared_task@shared_task
def test():import timetime.sleep(5)from dc.main.models import Personperson = Person(first_name='smith', last_name='jhon')person.save()c = Person.objects.count()print(f'person count is {c}')

修改dc/main/views.py

def hello(request):from dc.main.tasks import testtest.delay()return HttpResponse('hello world')

启动celery进程

celery -A dc worker -l info

接下来访问http://127.0.0.1:8000, 即可发现页面立刻返回, 并没有被time阻塞, 查看启动celery的窗口, 即可发现log以及打印的信息, 确定models可以正常使用.

おわり.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/254413.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一文学会,胶位偏移、缺胶、断胶、溢胶检测

文章目录检测任务检测思路点胶质量检测代码及解析图示处理思路博主写作不容易,孩子需要您鼓励 万水千山总是情 , 先点个赞行不行 检测任务 点胶检查检测以下缺陷: 1.缺少粘合胶的部分(断胶) 2.粘合剂过多或过少的部分&#x…

深入理解halcon相机标定

目录相机标定简介深度说明1、相机标定参数介绍2、标定板详细介绍问题1:halcon是否只能使用halcon专用的标定板?问题2:halcon标定板如何生成?问题3:halcon标定板如何摆放,拍照数量有无限制?标定步…

halcon模板匹配干扰边缘消除办法(最硬核方式)

目录halcon手绘形状匹配模板手绘形状匹配模板主要算子解析draw_nurbs 绘制平滑曲线参数解释create_shape_model_xld 使用XLD轮廓创建模板参数解释实例演示与解析实例代码展示与解析运行过程与处理展示读入图像绘制模板使用绘制的XLD创建模板查找模板博主写作不容易,…

第一个PowerShell脚本——PowerShell三分钟(九)

前面把基础知识讲了一遍,现在我们开始写一个最初级的脚本写脚本的工具有很多,有文本文档,有PowerShell ISE,PowerShell Studio等,这里选用系统自带的PowerShell ISE这里大家依然要记得以管理员身份运行,否则…

MVC架构简介及其测试策略

最近在WEB端测试工作中陷入了瓶颈,单纯的手动功能测试在没有成熟的代码规范之前还是很容易坑的,WEB自动化测试一时半会还没有什么进展,所以决定先学习一下网站用的MVC架构,跟着教程写了一个小网站,大概也找到了WEB测试…

C++多线程实例(_beginThreadex创建多线程)

C多线程(二)(_beginThreadex创建多线程) C/C Runtime 多线程函数一 简单实例(来自codeprojct:http://www.codeproject.com/useritems/MultithreadingTutorial.asp) 主线程创建2个线程t1和t2,创建时2个线程…

halcon求取区域顶点

文章目录简介Halcon源代码处理效果博主写作不容易,孩子需要您鼓励 万水千山总是情 , 先点个赞行不行 简介 使用halcon求取顶点的方法。 Halcon源代码 read_image (Image1, 1.png)points_foerstner (Image1, 1, 2, 3, 200, 0.3, gauss, false, RowJunctions, …

从excel表中生成批量SQL,将数据录入到数据库中

excel表格中有许多数据,需要将数据导入数据库中,又不能一个一个手工录入,可以生成SQL,来批量操作。1.首先在第二行的H列,插入函数:CONCATENATE("INSERT INTO book (bookid, title, volume, author, u…

Linux 的多线程编程的高效开发经验

转自:http://www.chineselinuxuniversity.net/articles/22615.shtml 本文中我们针对 Linux 上多线程编程的主要特性总结出 5 条经验,用以改善 Linux 多线程编程的习惯和避免其中的开发陷阱。在本文中,我们穿插一些 Windows 的编程用例用以对…

Visual C++中error spawning cl.exe解决办法

| 版权声明:本文为博主原创文章,未经博主允许不得转载。 今天安装Vc6.0的时候出现了一个error spawning cl.exe的错误,在网上找了一些资料,才知道这是因为路径设置的问题引起的, “cl.exe”是VC真正的程序编译器&…

HEXA机器人荣获CES Asia2018 创新奖

2019独角兽企业重金招聘Python工程师标准>>> 6月13日至15日,亚洲消费电子展CES Asia 2018将在上海新国际博览中心如期举行。在活动到来前,美国消费技术协会(CTA)于5月24日,提前揭晓了“2018亚洲消费电子展创…

【bzoj3994】[SDOI2015]约数个数和 莫比乌斯反演

题目描述 设d(x)为x的约数个数,给定N、M,求 输入 输入文件包含多组测试数据。 第一行,一个整数T,表示测试数据的组数。接下来的T行,每行两个整数N、M。输出 T行,每行一个整数,表示你所求的答案…

Linux根文件系统结构再认识

Linux根文件系统结构再认识刘建文(http://blog.csdn.net/keminlau ) INTRO 尽管Linux的根文件系统在形式表现上是一体的(所有数据目录均为根目录下的子目录),但实际它们是多个不同的【逻辑主体】(为了实现…

在Window10上使用Ubuntu终端

在Windows10上使用Ubuntu终端 习惯了ubuntu的开发,回到windows的command可以说是很绝望了。之前偶尔用windows时一直用git-bash来代替。但是发现windows已经添加了对ubuntu子系统的支持,那直接用不是更爽。 1.安装 进入控制面板,开启适用于Li…

为静态博客生成器WDTP移植了一款美美哒主题

前言 关于这个主题的移植后公布,我已经联系了主题作者并取得同意,这个主题是一夜涕所写的Sgreen,预览图见下 关于WDTP 就是一个很方便很便携很快速的cpp编写的带gui跨平台的开源的静态博客生成器,软件作者更新记录在V站可以找到,软…

TCP/IP数据包结构分析

一般来说,网络编程我们只需要调用一些封装好的函数或者组件就能完成大部分的工作,但是一些特殊的情况下,就需要深入的理解 网络数据包的结构,以及协议分析。如:网络监控,故障排查等…… IP包是不安全的&am…

世界杯快到了,看我用Python爬虫实现(伪)球迷速成!

还有4天就世界杯了,作为一个资深(伪)球迷,必须要实时关注世界杯相关新闻,了解各个球队动态,这样才能在一堆球迷中如(大)鱼(吹)得(特)水…

Bootstrap学习笔记(四)-----Bootstrap每天必学之表单

本文主要讲解的是表单,这个其实对于做过网站的人来说,并不陌生,而且可以说是最为常用的提交数据的Form表单。本文主要来讲解一下内容: 1.基本案例2.内联表单3.水平排列的表单4.被支持的控件5.静态控件6.控件状态7.控件尺寸8.帮助文…

服务器租用单线、双线、bgp 相比有哪些区别优势?

2019独角兽企业重金招聘Python工程师标准>>> 在IDC行业中,服务器的稳定性、安全性是考核服务商的主要指标,影响这两个指标的因素有很多,其中比较重要的有三个,分别是服务器的配置、机房骨干网宽带和机房的线路。我们常…

SQL Server 数据库的维护(四)__游标(cursor)

--维护数据库-- --游标(cursor)-- --概述: 注:使用select语句查询结果的结果集是一个整体,如果想每次处理一行或一部分行数据,游标可以提供这种处理机制。可以将游标理解为指针。指针指向哪条记录,哪条记录即是被操作记…