Celery+django+redis异步执行任务

本文用到的各工具版本:

  • celery 4.0.2
  • django 1.10.3
  • redis 3.2.6

特别注意:
如果你的项目是django框架,那么django-celery,celery-with-redis等等这些东西,都不要用了(这些东西会受python、celery版本的影响,我一直没测通…)。直接pip安装celery 4版本以上,pip安装redis就完全可以的

1.安装redis

二进制文件是编译完成后在src目录下,通过下面的命令启动Redis服务:
$ src/redis-server
你可以使用内置的客户端命令redis-cli进行使用:
$ src/redis-cli
redis> set foo bar
OK
redis> get foo
“bar”

下载,解压,编译:

# wget http://download.redis.io/releases/redis-3.2.6.tar.gz
# tar xzf redis-3.2.6.tar.gz
# cd redis-3.2.6
# make
# src/redis-server   # 启动redis服务,看清楚,这是在你的redis-3.2.6目录下执行的
# src/redis-cli   # 启动客户端

2.安装celery,redis

# pip install celery
# pip install redis

3.创建一个task

在django app目录中创建tasks.py:

import time
from celery import task@task()
def add(x, y):return x + y@task
def sendmail(mail):print "++++++++++++++++++++++++++++++++++++"print('sending mail to %s...' % mail['to'])time.sleep(2.0)print('mail sent.')print "------------------------------------"return mail['to']

4.开启worker

# celery -A tasks worker --loglevel=info

注意: 上面命令中的tasks是你创建的task所在的python 文件名称。如果你创建的这个tasks.py文件在app文件夹内,那么你要这么执行:


# celery -A app.tasks worker --loglevel=info

注意:每次更改tasks.py文件中的代码后,都要重新执行此命令!

5.试一下

>>> from app.tasks import *
>>> sendmail.delay(dict(to='asd@as.com'))
<AsyncResult: 694b6fa8-a123-4c22-9ba2-b77d7cbb066f>
>>> add.delay(2, 15)
<AsyncResult: 42d34419-4a34-49ab-9627-45428eaaeb38>
>>> a=add.delay(1,1)
>>> a.ready()
True
>>> a.get()
2
>>> a=add.delay(10,5)
>>> a.get()
15

6.实例

# views.py

from app.tasks import add,sendmaildef task_workorder(request, id):"""任务添加"""# ......你的代码......sendmail.delay(dict(to='asd@as.com'))  #申请人提交后会给审批人发邮件# ......你的代码......

注意:如果执行成功,你运行celery -A app.tasks worker –loglevel=info命令的终端会打印一些内容;如果执行失败,报一大把红色代码。。。那么恭喜你!出错了!这种错误,一般都是与你传的参数相关,尤其在django框架下,不要将queryset这种数据查询结果直接传递。

Celery+django+redis异步执行任务相关推荐

  1. django python3 异步_详解配置Django的Celery异步之路踩坑

    人生苦短,我用python. 看到这句话的时候,感觉可能确实是很深得人心,不过每每想学学,就又止步,年纪大了,感觉学什么东西都很慢,很难,精神啊注意力啊思维啊都跟不上.今天奶牛来分享自己今天踩的一个坑 ...

  2. Django+redis+celery实现异步任务

    1 Django中的异步请求 Django Web中从一个http请求发起,到获得响应返回html页面的流程大致如下:http请求发起 -- http handling(request解析) -- u ...

  3. celery 可视化_在Flask中使用Celery进行多任务分布执行

    关键字:Flask, Redis, RabbitMQ, Celery, Broker, Backend 前言 在后端服务器有时候需要处理耗时较长的任务,例如发送电子邮件,在处理这些任务时,这个线程就处 ...

  4. Celery+Rabbitmq实现异步任务

    Celery+Rabbitmq实现异步任务 一. 安装celery,再安装rabbitmq或redis pip install celery rabbitmq和redis安装其中一个就可以了,cele ...

  5. PHP 命令行模式实战之cli+mysql 模拟队列批量发送邮件(在Linux环境下PHP 异步执行脚本发送事件通知消息实际案例)...

    源码地址:https://github.com/Tinywan/PHP_Experience 测试环境配置: 环境:Windows 7系统 .PHP7.0.Apache服务器 PHP框架:ThinkP ...

  6. 【spring】spring异步执行的使用与源码分析

    在实际的开发过程中,有些业务逻辑使用异步的方式处理更为合理.比如在某个业务逻辑中,需要把一些数据存入到redis缓存中,这个操作只是一个辅助的功能,成功或者失败对主业务并不会产生根本影响,这个过程可以 ...

  7. PHP连接redis并执行redis相关命令的方法详解

    PHP连接redis并执行redis相关命令的方法详解 连接redis库的方法 共性的运算归类 redis服务类函数 set 操作增删改查 List栈的结构,注意表头表尾,创建更新分开操作 Set,没 ...

  8. 通过Python利用ADSL服务器和tinyproxy构建数据自己的动态代理IP池,用django+redis做web服务,提供IP接口

    应公司业务需求需要在一些地方使用代理,要求连通率高,速度快,最主要的还要便宜,对比多家供应商后,最后还是决定自购拨号服务搭建代理IP池. 需要配置:1.一台或多台adsl服务器(用以提供IP,可网上购 ...

  9. Springboot 指定重发的次数和延迟时间,定时异步执行 重发任务

    以前写过一篇基于Springboot使用retry框架进行实现重试业务场景的文章: https://blog.csdn.net/qq_35387940/article/details/99676114 ...

最新文章

  1. 2022-2028年中国工业4.0深度调研及投资前景预测报告(全卷)
  2. python创建图片对应的csv格式_Python:如何从csv文件创建图形节点和边?
  3. mybatis的#和$的差别
  4. VSCode 初次写vue项目并一键生成.vue模版
  5. 闭包 —JavaScript面向对象高级
  6. 米家扫地机器人充满电需要多长时间_米家扫地机器人充满电后能工作多久?
  7. 数学:乘法逆元-拓展GCD
  8. python中数据类型不同运算不同_Python的基本数据类型与运算
  9. UVA 11452 Dancing the Cheeky-Cheeky
  10. [POJ1830] 开关问题
  11. 微服务Eureka使用详解
  12. Matlab 函数文件简介
  13. 爱快做无线打印服务器,听说爱快路由器也支持NAS了?
  14. Proxy的常见使用——正向代理的使用及配置总结
  15. linux上运行gfortran,linux – gfortran:在64位系统中编译32位可执行文件
  16. 华为产品总监谈投身互联网:要避免与腾讯竞争
  17. 哈夫曼树实现文件的压缩与解压缩
  18. 看牛人如何学习JAVA-如何学习java
  19. cad把图形切成两部分_CAD入门教程,最常用快捷键
  20. 长治计算机专业,长治计算机专业好就业吗?,计算机专业

热门文章

  1. 性能测试:手机IOS性能测试
  2. 亿级流量电商JVM调优(转图灵学院)
  3. 双u服务器装win7系统安装,u深度一键u盘装原版win7 安装系统详细使用教程
  4. 第二章 Silicon labs EFR32 MG21 验证蓝牙的私有Characteristic的读/写
  5. html设置页面宽度高度,a4纸宽度_A4纸网页打印 html网页页面的宽度设置成多少 _a4纸宽度高度...
  6. rabbitmq User can only log in via localhost
  7. 漫画:骚操作系列(必须掌握的疯子找座问题)
  8. ES6中import * as xxx from 'xxx'的作用
  9. GuzzleHttp使用
  10. 达梦数据库逻辑备份(dexp/dimp)