Celery+django+redis异步执行任务的实现示例

 更新时间:2025年04月23日 09:38:53   作者:皓阳当空  
本文主要介绍了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,sendmail

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

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

到此这篇关于Celery+django+redis异步执行任务的实现示例的文章就介绍到这了,更多相关Celery+django+redis异步执行内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Pycharm最新激活码2019(推荐)

    Pycharm最新激活码2019(推荐)

    这篇文章主要介绍了Pycharm最新激活码2019,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-12-12
  • django queryset相加和筛选教程

    django queryset相加和筛选教程

    这篇文章主要介绍了django queryset相加和筛选教程,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-05-05
  • Python正确重载运算符的方法示例详解

    Python正确重载运算符的方法示例详解

    这篇文章主要给大家介绍了关于Python如何正确重载运算符的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们参考借鉴,下面随着小编来一起学习学习吧。
    2017-08-08
  • Python+request+unittest实现接口测试框架集成实例

    Python+request+unittest实现接口测试框架集成实例

    这篇文章主要介绍了Python+request+unittest实现接口测试框架集成实例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-03-03
  • python实现维吉尼亚算法

    python实现维吉尼亚算法

    这篇文章主要为大家详细介绍了python编程实现维吉尼亚算法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-03-03
  • python环境功能强大的pip-audit安全漏洞扫描工具

    python环境功能强大的pip-audit安全漏洞扫描工具

    这篇文章主要为大家介绍了python环境中功能强大的pip-audit安全漏洞扫描工具的功能介绍及安装使用说明,有需要的朋友可以借鉴参考下,希望能够有所帮助
    2022-02-02
  • 使用Python实现从各个子文件夹中复制指定文件的方法

    使用Python实现从各个子文件夹中复制指定文件的方法

    今天小编就为大家分享一篇使用Python实现从各个子文件夹中复制指定文件的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-10-10
  • Django中提供的6种缓存方式详解

    Django中提供的6种缓存方式详解

    这篇文章主要介绍了Django中提供的6种缓存方式详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-08-08
  • python3.7 的新特性详解

    python3.7 的新特性详解

    这篇文章主要介绍了python3.7 的新特性详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-07-07
  • python中in和is的区别点总结

    python中in和is的区别点总结

    在本篇文章里小编给大家整理的是一篇关于python中in和is的区别点总结,有兴趣的朋友可以跟着学习下。
    2021-05-05

最新评论