美文网首页
python与分布式任务队列celery

python与分布式任务队列celery

作者: Py_Explorer | 来源:发表于2018-08-23 11:13 被阅读0次

    1. celery的简单使用

    #celery结合redis的操作
    #coding=utf-8
    from docx import Document  
    # document = Document()
    # document.save('test.docx')
    # -*- coding:utf8 -*-
    import time
    from celery import Celery
    celery = Celery('tasks', broker='redis://localhost:6379/0')
    # 如果有redis密码
    # celery = Celery('tasks', broker='redis://:foobared@localhost:6379/0')
    
    @celery.task
    def add(x, y):
        return x + y
    

    1. 首先打开redis

    2. 在当前目录下启动celery

       celery  -A demo[为文件名]  worker --loglevel=info
    

    3. 跟进任务

       进入python控制台
       >>> from tasks import add
       >>> add.delay(2, 5)
       <AsyncResult: 4c079d93-fd5f-47f0-8b93-c77a0112eb4e>
    

    这个”delay()”方法会将任务发送到消息中间人队列,并由之前启动的后台职程来执行。所以这时Python控制台上只会返回”AsyncResult”信息。如果你看下之前职程的启动窗口,你会看到多了条日志”Task tasks.add[4c079d93-fd5f-47f0-8b93-c77a0112eb4e] succeeded in 0.0211374238133s: 7″。说明”add”任务已经被调度并执行成功,并且返回7。

    4. 关于配置,可看celery操作一节。

    5. 关于并发

    任务的并发默认采用多进程方式,Celery也支持gevent或者eventlet协程并发。方法是在启动职程时使用”-P”参数:

    celery worker  -A  demo1  --loglevel=info  -P  gevent  -c  100
    

    通过”-P gevent”我们就将并发改为了gevent方式了;”-c 100″同之前介绍的”concurrency”参数,指定了并发个数。对于gevent不熟悉的朋友,可以看看我之前的文章。另外默认多进程方式的参数值是”prefork”。

    相关文章

      网友评论

          本文标题:python与分布式任务队列celery

          本文链接:https://www.haomeiwen.com/subject/cgepiftx.html