• python分布式任务队列celery调研与实践


    celery是一个python编写的分布式任务队列,支持实时调度和定时调度。

    celery 架构

    优势

    对比crontab,celery的优势如下:

    平台 可配置 分布式 可监控 可指定任务执行
    celery 灵活
    crontab 不灵活,需要登陆机器 单机

    实现

    初始化环境

    virtualenv env

    source env/bin/activate

    pip install -r requirements.txt

    其中,依赖如下:

    Django1.8.2
    celery
    3.1.18
    celery-with-redis3.0
    django-celery
    3.1.16
    flower0.9.5
    pymysql
    0.10.1

    同步数据库

    python manage.py syncdb

    然后创建superuser

    python manage.py createsuperuser

    启动server

    python manage.py runserver 0.0.0.0:8008

    启动多个worker(消费)

    python manage.py celery worker -l info -n worker1

    python manage.py celery worker -l info -n worker2

    启动beat(生产者)

    python manage.py celery beat -l info

    启动监控:

    flower -A mysite 5555

    一些有用的技巧

    任务继承

    可以创建一个任务的基类,实现类似于错误处理等通用方法。

    class MyTask(celery.Task):
        def on_failure(self, exc, task_id, args, kwargs, einfo):
            print('{0!r} failed: {1!r}'.format(task_id, exc))
            # 发邮件/企微给负责人
    
    
    @task(base=MyTask)
    def add(x, y):
        raise KeyError()
    

    监控平台flower

    pip install flower

    flower -A mysite 5555

    文档:https://flower-docs-cn.readthedocs.io/zh/latest/

    关键API:

    POST /api/task/send-task/(.+)

    通过名称来执行task
    Example request:

    POST /api/task/send-task/tasks.add HTTP/1.1
    Accept: application/json
    Accept-Encoding: gzip, deflate, compress
    Content-Length: 16
    Content-Type: application/json; charset=utf-8
    Host: localhost:5555
    
    {
            "args": [1, 2]
    }
    

    Example response:

    HTTP/1.1 200 OK
    Content-Length: 71
    Content-Type: application/json; charset=UTF-8
    
    {
            "state": "SUCCESS",
    "task-id": "c60be250-fe52-48df-befb-ac66174076e6"
    }
    

    效果

    消费者实例:

    任务执行历史:

    监控效果,可以看到成功数,失败数,执行时长和堆积的任务数:

    参考

  • 相关阅读:
    搜索部分学习小结
    递归与搜索部分知识点小结
    匿名函数
    监督学习和非监督学习
    单变量线性回归
    神经网络(2)
    html
    javascript
    win10+celery4.x以上+redis的天坑
    Django-Views
  • 原文地址:https://www.cnblogs.com/puyangsky/p/13849436.html
Copyright © 2020-2023  润新知