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. 吴恩达机器学习-终于完成ex4

    几年前就想学习吴恩达的老课-机器学习,学了n次都没有坚持下来.其实很多东西都是这样,开始的时候信誓旦旦,信心满满,慢慢的就泄气了. 每天铺天盖地的深度学习,人工智能听得耳朵都要起茧子了.这算法,那框架 ...

  2. 转载·Charles4.2.8 开启macOS Proxy ,MacOS10.15 Catalina版本提示APP权限为只读

    转载地址:https://superuser.com/questions/1490116/charles-4-2-8-cannot-configure-your-proxy-settings-whil ...

  3. 如何像Facebook一样构建数据中心 – BGP在大规模数据中心中的应用(3)

    如何像Facebook一样构建数据中心 – BGP在大规模数据中心中的应用(3) superrace• 18-06-12 作者简介:史梦晨,曾就职于国内金牌集成商, 现就职于EANTC( 欧洲高级网络 ...

  4. ubuntu系统使用 sudo: cd:找不到命令

    1. https://blog.csdn.net/sazass/article/details/125694492 https://blog.csdn.net/weixin_34033624/arti ...

  5. 【LuckyFrame研究】环境准备

    LuckyFrame官方使用手册:http://www.luckyframe.cn/book/yhsc/syschyy-24.html LuckyFrame在码云平台或是GitHub上都是分成二个项目 ...

  6. 【学习】蓝牙的一些基础知识or什么是蓝牙

    蓝牙----Bluetooth(短距离无线通信技术)  2022-07-29   14:31:27 蓝牙技术有什么特点(体积小,易集成,低功耗,适用广,抗干扰,成本低,开放性) (1) 蓝牙模块体积很 ...

  7. Linux & 标准C语言学习 <DAY7>

    一.windows下获取方向键:     1.导入#include <conio.h>     2.通过getch()获取键盘上的键值         上:72  下:80  左:75   ...

  8. Mathematica做数字图像处理中的ImageConvolve练习

    目录 ImageConvolve练习 original right sobel 垂直边检测 top sobel 水平边检测 通过一个平方内核的卷积使图像变平滑 类似ConstantArray[1, { ...

  9. 百度生成式AI产品文心一言邀你体验AI创作新奇迹:百度CEO李彦宏详细透露三大产业将会带来机遇(文末附文心一言个人用户体验测试邀请码获取方法,亲测有效)

    目录 中国版ChatGPT上线发布 强大中文理解能力 智能文学创作.商业文案创作 图片.视频智能生成 中国生成式AI三大产业机会 新型云计算公司 行业模型精调公司 应用服务提供商 总结 获取文心一言邀 ...

  10. 深入了解 JavaScript 内存泄漏

    作者:京东零售 谢天 在任何语言开发的过程中,对于内存的管理都非常重要,JavaScript 也不例外. 然而在前端浏览器中,用户一般不会在一个页面停留很久,即使有一点内存泄漏,重新加载页面内存也会跟 ...