• celery的使用


    celery

    介绍

    • 一个简单、灵活且可靠、处理大量消息的分布式系统,可以在一台或者多台机器上运行。
    • 单个 Celery 进程每分钟可处理数以百万计的任务。
    • 通过消息进行通信,使用消息队列(broker)在客户端和消费者之间进行协调。

    总体架构

    Celery的架构由消息中间件(message broker),任务执行单元(worker)和任务执行结果存储(task result store)三部分组成。

    消息中间件
    Celery本身不提供消息服务,但是可以方便的和第三方提供的消息中间件集成,包括RabbitMQ,Redis,MongoDB等

    任务执行单元
    Worker是celery提供的任务执行的单元,worker并发的运行在分布式的系统节点中。

    任务结果存储
    Task result store用来存储Worker执行的任务的结果,Celery支持以不同方式存储任务的结果,包括AMQP,redis,memcached,mongodb,SQLAlchemy,Django等

    注册任务

    import os

    from celery.app import Celery

    # 设置Django环境,告诉celery当前是Django项目;项目名字.
    os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'meiduo_market.settings')

    # 2 创建celery对象,这里我一般同一台服务器部署同一个项目时会使用项目的名字避免冲突;celery_tasks包名字
    app = Celery('celery_tasks')

    # 3 设置 broker
    app.config_from_object("celery_tasks.config");celery_tasks包名字.配置文件

    # 4celery自动检测任务 这里会自动去celery_tasks.sms下找tasks.py
    app.autodiscover_tasks(['celery_tasks.sms'])



    特别注意:
    在同一台服务器做新旧迁移的时候,使用celery要特意区分出Celery('celery_tasks')的名字,
      还有celery_tasks.config文件里面的redis的消息接收和结果的队列不要和已经使用的celery监控的对象一致。如果一致了会被其他的celery消费。

    启动

    celery -A celery_tasks.main worker -l info #这是linux的命令
    -A指对应的应用程序, 其参数是项目中 Celery实例的位置。
    worker指这里要启动的worker。
    -l指日志等级,比如info等级
    windows启动celery 需要加参数,用如下命令启动服务
      celery -A celery_tasks.main worker -l info --pool=solo
      或者
      celery -A celery_tasks.main worker -l info -P eventlet

    定时任务

    Scheduler(定时任务,周期性任务)

    一种常见的需求是每隔一段时间执行一个任务

    在celery中执行定时任务非常简单,只需要设置celery对象的CELERYBEAT_SCHEDULE属性即可。

    配置如下 config.py

    from __future__ import absolute_import

    BROKER_URL = "redis://localhost:6379/0"
    CELERY_BACKEND_URL = "redis://localhost:6379/1"

    CELERY_TIMEZONE = "Asia/Shanghai"

    from datetime import timedelta

    CELERYBEAT_SCHEDULE = {
      'add-every-30-seconds':{
          'task':'proj.tasks.add',
          'schedule':timedelta(seconds=30),
          'args':(16, 16)
      },
    }
    注意配置文件需要指定时区,这段代码表示每隔30秒执行add函数,一旦使用了scheduler,启动celery需要加上-B参数。

    celery -A proj worker -B -l info

     
  • 相关阅读:
    信用风险评分卡研究-第7章笔记
    信用风险评分卡研究-第6章笔记
    信用风险评分卡研究-第5章
    CSS3新特性
    H5相关知识点整理
    css3实现立体魔方效果
    后台管理系统基本布局
    react路由初探(2)
    react路由初探(1)
    将一个数组转化为需要的格式,来自react官网的商品列表示例
  • 原文地址:https://www.cnblogs.com/topass123/p/16609595.html
Copyright © 2020-2023  润新知