Celery是Python开发的简单、灵活可靠的、处理大量消息的分布式任务调度模块

安装:

  pip install celery  # 安装celery库

  pip install redis  # celery依赖于redis

  pip install eventlet  # Windows下需要安装

项目结构:

  

主项目目录下celery.py

from __future__ import absolute_import, unicode_literals
import os
from celery import Celery # django_test是我的项目名 os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'django_test.settings') # 设置django环境 app = Celery('django_test') app.config_from_object('django.conf:settings', namespace='CELERY') # 使用CELERY_ 作为前缀,在settings中写配置 app.autodiscover_tasks()

在主项目下__init__.py添加下面代码

# celery
from .celery import app as celery_app
__all__ = ['celery_app']

在settings.py添加celery配置

# celery 配置
redis_host = "redis://:" + redispwd + "@" + redishost + ":" + redisport + "/3"
CELERY_BROKER_URL = redis_host
redis_host = "redis://:" + redispwd + "@" + redishost + ":" + redisport + "/4"
CELERY_RESULT_BACKEND = redis_host
CELERY_RESULT_SERIALIZER = 'json'
CELERY_TASK_RESULT_EXPIRES = 24 * 60 * 60
# CELERY_MAX_TASKS_PER_CHILD = 10
CELERY_TIMEZONE = 'Asia/Shanghai'

在app下面新建tasks.py

from __future__ import absolute_import, unicode_literals

import time

from celery import shared_task
from django.conf import settings @shared_task
def add(x, y):
time.sleep(30)
print("celery结果")
return x + y @shared_task
def mul(x, y):
print('x*y')
return x * y @shared_task
def reduce(number): with open(settings.BASE_DIR + '/data.py', 'r') as f:
tot = int(f.read())
print(tot)
print('celery_t')
if tot == 0:
return 0
else:
data = tot - number
with open(settings.BASE_DIR+'/data.py', 'w') as f:
f.write(str(data))
return 1

我的views.py文件

import datetime
import json
import traceback from django.conf import settings
from django.contrib.auth.hashers import make_password
from django.core.cache import cache
from django.core.paginator import Paginator
from django.http import JsonResponse
from rest_framework.response import Response from rest_framework.decorators import APIView
from . import tasks class Test(APIView): def get(self, request):
li = []
body = request.query_params.dict()
task_id = body.get('task_id')
from celery import result
ar = result.AsyncResult(task_id)
print("--------", ar)
print(ar.ready(), ar.state)
if ar.ready():
print(ar.state, ar.get())
if ar.state == 'SUCCESS':
ret = ar.get() resp = {"success": 1, "data": ret} elif ar.state == "FAILURE" or ar.state == "REVOKED": resp = {"success": 1, "data": 0}
else: resp = {"success": 1, "data": 0} return Response(resp) def post(self, request):
li = []
resp = {"success": 1, "data": li}
# with open(settings.BASE_DIR+'/data.py', 'r') as f:
# total = int(f.read())
# print(total) t = tasks.reduce.delay(1)
print(t.id)
resp = {"success": 1, "data": t.id}
return Response(resp)

post请求创建新的任务,get请求通过任务id查询任务状态。

我的data.py文件写入了一个数字,代表商品所剩数量,每次post请求创建新的任务,则会打开data.py文件判断里面数字是否为0,为0表示商品已被抢完,否则数字减1,表示抢到该商品。

django中使用celery,模拟商品秒杀。的更多相关文章

  1. celery介绍、架构、快速使用、包结构,celery执行异步、延迟、定时任务,django中使用celery,定时更新首页轮播图效果实现,数据加入redis缓存的坑及解决

    今日内容概要 celery介绍,架构 celery 快速使用 celery包结构 celery执行异步任务 celery执行延迟任务 celery执行定时任务 django中使用celery 定时更新 ...

  2. Django 中使用 Celery

    起步 在 <分布式任务队列Celery使用说明> 中介绍了在 Python 中使用 Celery 来实验异步任务和定时任务功能.本文介绍如何在 Django 中使用 Celery. 安装 ...

  3. Django中使用Celery实现定时任务(用djcelery)

    一.引言 Django是python语言下的一个比较热门的Web框架,越来越多的企业和开发者使用Django实现自己的Web服务器.在Web服务器开发过程中,有时候我们不仅仅是要实现Web服务器端和用 ...

  4. Python—在Django中使用Celery

    一.Django中的请求 Django Web中从一个http请求发起,到获得响应返回html页面的流程大致如下: http请求发起 经过中间件 http handling(request解析) ur ...

  5. Django中使用Celery

    一.前言 Celery是一个基于python开发的分布式任务队列,如果不了解请阅读笔者上一篇博文Celery入门与进阶,而做python WEB开发最为流行的框架莫属Django,但是Django的请 ...

  6. Celery简介以及Django中使用celery

    目录 Celery简介 消息中间件 任务执行单元 任务结果存储 使用场景 Celery的安装和配置 Celery执行异步任务 基本使用 延时任务 定时任务 异步处理Django任务 案例: Celer ...

  7. 使用redis 中的事务处理实现商品秒杀

    redis中的事务处理: redis中的事物事物处理是指能够批量的执行一组命令(当事务开始执行时,事务中的命令能够按照按照规定好的顺序执行而不会被插队或打断): 与mysql事务的区别在于:mysql ...

  8. Django中使用Celery,定制应用程序中定义的shared_task未在定期任务管理页面的注册任务中显示

    解决办法: 在项目 proj/proj/celery.py文件中,看到下面这行配置: celery_app.config_from_object('django.conf:settings', nam ...

  9. 四、Django中使用celery

    项目跟目录创建celery包,目录结构如下: mycelery/ ├── config.py ├── __init__.py ├── main.py └── sms/ ├── __init__.py ...

  10. celery在Django中的集成使用

    继上回安装和使用Redis之后,看看如何在Django中使用Celery.Celery是Python开发分布式任务列队的处理库.可以异步分布式地异步处理任务,也可定时执行任务等等.通常我们可以在Dja ...

随机推荐

  1. 转型.netCore开发 记录日常问题

    1.页面问题 asp-for date字段页面显示时间为"yyyy-MM-dd"类型通过@{}来处理,定义常量,将处理后的值赋值给常量,再通过@常量正常赋值例:@{ var beg ...

  2. win 子系统导入centos7

    之前在应用商店安装过ubuntu的,有钱的建议从商店购买 window配置 , 准备一个centos系统,我是从已有系统导出的,导出命令 tar -cvf ./centos.tar ./ --excl ...

  3. P3512 [POI2010]PIL-Pilots 单调队列的应用

    题目描述 给定n,k和一个长度为n的序列,求最长的最大值最小值相差不超过k的序列 输入格式 第一行两个有空格隔开的整数k(0<=k<=2000,000,000),n(1<=n< ...

  4. Linux基础驱动开发

    开始:1.要在自己的Linux源码中创建自己的模块文件.在drivers下创建自己的文件名为myled.然后创建myleds.c文件,编写源码 2.Makefile和Kconfig的设置 在myled ...

  5. 在为 DataGridView 添加数据列时,弹出 将要添加的列 CellType 属性为空 错误提示与说明

    事务:为 DataGridView 添加数据列[也可以说是直接操作 DataGridView 数据列...]... 原由:在为 DataGridView 添加列的时候,[至少这是第三次遇到] 弹出 添 ...

  6. 初始化时使window 全屏 且显示任务栏 wpf

    void IniWindowFullScreemAndDisplayTaskbar() { this.Width = SystemParameters.FullPrimaryScreenWidth; ...

  7. QImageReader(Writer)支持格式变少的解决方法

    首发于我的个人博客:xie-kang.com 博客内有更多文章,欢迎大家访问 原文地址 获取程序支持的图片格式: #include "mainwindow.h" #include ...

  8. ansible批量采集、批量互信、批量复制、分发文件

    一.先说一下用ansible批量采集机器信息的实现办法: 1.先把要采集的机器信息的IP添加到主节点机器的/etc/ansible/hosts里面: 2.在/etc/ansible/hosts里面添加 ...

  9. Python学习笔记--数据可视化的开头

    JSON数据格式的转换 示例: 若是有中文数据,可以在data后面加上ensure_ascii=False pyecharts模块 网站:https://gallery.pyecharts.org(有 ...

  10. 孙勇男:实时视频 SDK 黑盒测试架构丨Dev for Dev 专栏

    Dev for Dev 专栏全称为 Developer for Developer,该专栏是声网与 RTC 开发者社区共同发起的开发者互动创新实践活动.透过工程师视角的技术分享.交流碰撞.项目共建等多 ...