Celery+django+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 # 启动客户端
  • # pip install celery # pip install redis
  • 在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’]
  • # celery -A tasks worker –loglevel=info 注意: 上面命令中的tasks是你创建的task所在的python 文件名称。如果你创建的这个tasks.py文件在app文件夹内,那么你要这么执行: # celery -A app.tasks worker –loglevel=info 注意:每次更改tasks.py文件中的代码后,都要重新执行此命令!
  • >>> 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
  • # 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异步执行内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客! 您可能感兴趣的文章: Django使用Celery加redis执行异步任务的实例内容
  • 目录
    • 1.安装redis
    • 2.安装celery,redis
    • 3.创建一个task
    • 4.开启worker
    • 5.试一下
    • 6.实例

    本文用到的各工具版本:

    • 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就完全可以的

    二进制文件是编译完成后在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   # 启动客户端

    # pip install celery
    # pip install redis

    在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']

    # celery -A tasks worker --loglevel=info

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

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

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

    >>> 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

    # 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异步执行内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客!

    您可能感兴趣的文章:

    • Django使用Celery加redis执行异步任务的实例内容

    站内搜索