使用celery执行Django串行异步任务的方法步骤


Posted in Python onJune 06, 2019

前言

Django项目有一个耗时较长的update过程,希望在接到请求运行update过程的时候,Django应用仍能正常处理其他的请求,并且update过程要求不能并行,也不能漏掉任何一个请求

使用celery的solo模式解决

安装redis

https://github.com/microsoftarchive/redis/releases

下载.msi文件安装,会直接将redis注册为windows服务

安装celery与redis依赖

pip install celery
pip indatll redis

一个celery应用

# celery_test.py
import time

from celery import Celery

app = Celery('tasks', broker='redis://127.0.0.1:6379/0')


@app.task
def add(x, y):
 time.sleep(5)
 return x + y

启动celery服务

celery -A celery_test.app worker --pool=solo -l info

查看完整的命令行参数列表

celery worker --help

对celery启动命令的解释

  • '-A' 是一个全局配置,定义了APP的位置
  • '--pool' 是POOL的配置,默认是prefork(并发),选择solo之后,发送的任务不会被并发执行,在worker执行任务过程中,再次发送给worker的任务会排队,执行完一个再执行另一个
  • '-l' 是WORKER的配置,定义了log级别

调用任务

>>> from celery_test import add
>>> add.delay(4,4)

因为启动了solo模式,因此,可以看到在一个add没有执行完前,即使再次发送执行add的任务,celery worker也会等到前一个任务执行完才去执行下一个

与Django结合

在装载celery应用前先setup django

import time
import os
import django
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "demo.settings")
django.setup()

from celery import Celery

from django_app.update import update

app = Celery('tasks', broker='redis://127.0.0.1:6379/0', backend='redis://127.0.0.1:6379/0')

@app.task
def update_task():
 update()

然后在views中调用task就可以了。

from celery_test import update_task
def update_api(request):
 if request.method == "GET":
  update_task.delay()
  return HttpResponse(status=status.HTTP_200_OK)

执行过程中,程序的print信息会作为celery warning,报错信息会作为celery error

日志

在启动应用的时候指定日志文件路径

-f log_path

不设置这个参数的时候,日志默认输出到控制台

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python生成指定长度的随机数密码
Jan 23 Python
详解Python里使用正则表达式的ASCII模式
Nov 02 Python
Python实现的当前时间多加一天、一小时、一分钟操作示例
May 21 Python
Python3中内置类型bytes和str用法及byte和string之间各种编码转换 问题
Sep 27 Python
解决Python print输出不换行没空格的问题
Nov 14 Python
django 中的聚合函数,分组函数,F 查询,Q查询
Jul 25 Python
python读取word 中指定位置的表格及表格数据
Oct 23 Python
django实现模型字段动态choice的操作
Apr 01 Python
Python如何自动获取目标网站最新通知
Jun 18 Python
keras实现VGG16方式(预测一张图片)
Jul 07 Python
python Selenium 库的使用技巧
Oct 16 Python
python 实现学生信息管理系统的示例
Nov 28 Python
python opencv摄像头的简单应用
Jun 06 #Python
Python完成毫秒级抢淘宝大单功能
Jun 06 #Python
Python匿名函数/排序函数/过滤函数/映射函数/递归/二分法
Jun 05 #Python
记录Python脚本的运行日志的方法
Jun 05 #Python
详解利用Python scipy.signal.filtfilt() 实现信号滤波
Jun 05 #Python
分享8个非常流行的 Python 可视化工具包
Jun 05 #Python
Django组件cookie与session的具体使用
Jun 05 #Python
You might like
PHP排序算法的复习和总结
2012/02/15 PHP
PHP页面间参数传递的四种方法详解
2013/06/09 PHP
PHP中的函数-- foreach()的用法详解
2013/06/24 PHP
Symfony2开发之控制器用法实例分析
2016/02/05 PHP
广告切换效果(缓动切换)
2009/05/27 Javascript
jMessageBox 基于jQuery的窗口插件
2009/12/09 Javascript
修改jquery里的dialog对话框插件为框架页(iframe) 的方法
2010/09/14 Javascript
Javascript 页面模板化很多人没有使用过的方法
2012/06/05 Javascript
js实现在文本框光标处添加字符的方法介绍
2012/11/24 Javascript
js中Image对象以及对其预加载处理示例
2013/11/20 Javascript
javascript中一些util方法汇总
2015/06/10 Javascript
Grunt入门教程(自动任务运行器)
2015/08/06 Javascript
Nginx上传文件全部缓存解决方案
2015/08/17 Javascript
bootstrapValidator自定验证方法写法
2016/12/01 Javascript
JavaScript中call和apply方法的区别实例分析
2018/08/03 Javascript
vue.js input框之间赋值方法
2018/08/24 Javascript
使用Angular material主题定义自己的组件库的配色体系
2019/09/04 Javascript
python中使用enumerate函数遍历元素实例
2014/06/16 Python
对pandas进行数据预处理的实例讲解
2018/04/20 Python
python通过Windows下远程控制Linux系统
2018/06/20 Python
Python实现加密接口测试方法步骤详解
2020/06/05 Python
PyInstaller运行原理及常用操作详解
2020/06/13 Python
Python图像处理二值化方法实例汇总
2020/07/24 Python
Python3如何实现Win10桌面自动切换
2020/08/11 Python
ROSEFIELD手表荷兰官方网上商店:北欧极简设计女士腕表品牌
2018/01/24 全球购物
伦敦哈德森鞋:Hudson Shoes
2018/02/06 全球购物
Spartoo美国:欧洲排名第一的在线时装零售商
2019/12/12 全球购物
您的时尚,您的生活方式:DTLR Villa
2019/12/25 全球购物
Timberland俄罗斯官方网上商店:全球领先的户外品牌
2020/03/15 全球购物
硕士研究生求职自荐信范文
2014/03/11 职场文书
宪法宣传周工作方案
2014/05/26 职场文书
运动会报道稿300字
2014/10/02 职场文书
综治工作汇报材料
2014/10/27 职场文书
酒店圣诞节活动总结
2015/05/06 职场文书
机关单位保密工作责任书
2015/05/11 职场文书
python 字典和列表嵌套用法详解
2021/06/29 Python