Application

application

  1. celery在使用之前,必须首先实例化。e.g. app = Celery()
  2. app 是线程安全的,即:不同配置、组件和任务的多个app可以共存在同一个进程空间。

任务注册表(task-registry)

在Celery中发送一个task 消息,这个消息并不包含任何源代码(函数体)。而是只有你所期望执行的task的名字。每个worker有一个任务注册表(task-registry),它是task 名称与 task 源代码(函数)的映射。每当你定义一个task,这个task就会被注册到本地的注册表中

懒加载

Celery创建app实例是延迟的,只有在调用它的时候才会创建。也就是说,Celery()命令并没有立即创建app实例。

Celery实例化的过程中,做了如下操作:

  • 创建了一个逻辑时钟,用于events
  • 创建了一个任务注册表 task-registry
  • 设置它自己为当前的Celery实例(如果set_as_current 参数被置为disabled,那么就不会进行该操作)
  • 调用app.on_init() (默认情况下,啥都没做)

@app.task 装饰器也是延迟创建task的。task被定义的时候(在一个函数头上加装饰器的时候),task并没有立即创建。在task被使用的时候,或者是app finalized 的时候,task才会创建

finalized 做了如下操作:

  • task是在多app之间共享的,拷贝task。(shard参数可以取消共享,使task独属于其绑定的app)
  • 创建所有的task
  • 确保所有的task都绑定到当前的app(只有绑定app,task才能读取默认的配置)

Main name

task 默认的名称组成是 model.fun e.g. tasks.add

当model名获取不到的时候就会以 __main__ 作为model名。因此会出现 某task以 __main__.add 为名注册到 任务注册表之后,当某个task被引入到其他模块时,会以源模块.task作为任务名,这个时候,就会出现不一致的情况,所以,在Celery实例化的时候一定要指定app的名字。e.g. app=Celery(‘tasks’)

配置Celery

Celery的配置有如下几种:

  • 直接配置app属性
  • 使用配置文件

直接配置app属性

  • 单个配置

app.conf.enable_utc = True

  • 多个配置
app.conf.update(enable_utc=True, timezone='Asia/Shanghai')

使用配置文件

从配置文件加载配置,使用 app.config_from_object()app.config_from_envvar()方法。

config_from_object

app = Celery()
app.config_from_object('celeryconfig.py')
# 项目中要有 celeryconfig.py 文件
from xxxx import configmodel

app = Celery()
app.config_from_object(configmodel)
class Config:
enable_utc = True
app = Celery()
app.config_from_object(Config)

config_from_envva

从环境变量加载指定模块

app.config_from_envvar('CELERY_CONFIG_MODEL')

Task

所有使用 @task() 装饰器定义的task,都继承自基类 Task 。你也可以指定自己的基类 Task

  1. 在装饰器中指定其他类
@app.task(base=OtherTask)
def function():
...
  1. 在配置中指定其他类
app = Celery()
app.Task = OtherTask

自定义 Task

所有的自定义 Task 都必须

继承自 Task

class MyTask(Task):
...

最佳实践是 app 作为参数传给需要它的地方

class SomeClass:
def __init__(self, app):
self.app = app
...

celery(一) application的更多相关文章

  1. 【理论】python使用celery异步处理请求

    Flask中使用celery队列处理执行时间较长的请求. 一. 安装celery pip install celery flask redis 二. celery简介 Celery是个异步分布式任务队 ...

  2. day102:MoFang:后端完成对短信验证码的校验&基于celery完成异步短信发送&flask_jwt_extended&用户登录的API接口

    目录 1.用户注册 1.后端完成对短信验证码的校验 2.基于celery实现短信异步发送 2.用户登录 1.jwt登录验证:flask_jwt_extended 2.服务端提供用户登录的API接口 1 ...

  3. cellery ImportError & AttributeError

    一.zz的问题 celery 运行work要进入到 文件所在的文件夹下执行 二.AttributeError: 'Flask' object has no attribute 'user_option ...

  4. day121:MoFang:植物的状态改动(幼苗→成长期)&植物的浇水功能

    目录 1.当果树种植以后在celery的异步任务中调整浇水的状态 2.客户端通过倒计时判断时间,显示浇水道具 3.客户端判断当前种植物状态控制图标的显示和隐藏 4.当用户单击浇水图标, 则根据当前果树 ...

  5. Celery(三)实例Application

    Celery必须实例化后才可以使用,实例称之为application或者简称app.实例是线程安全的,多个Celery实例(不同的配置.部件和任务)都可以在一个进程空间中运行. 创建一个最简单的app ...

  6. Celery,Tornado,Supervisor构建和谐的分布式系统

    Celery 分布式的任务队列 与rabbitmq消息队列的区别与联系: rabbitmq 调度的是消息,而Celery调度的是任务. Celery调度任务时,需要传递参数信息,传输载体可以选择rab ...

  7. celery简单入门

    写作背景介绍 最近在做后台图像处理,需要使用到celery这个异步任务框架.但是使用的时候遇到很多技术问题,为了方便日后再遇到相似问题时能够快速解决.写下这篇文章也希望能够帮助共同奋战在同一战线的程序 ...

  8. 异步任务神器 Celery 简明笔记

    转自:http://www.jianshu.com/p/1840035cb510 异步任务 异步任务是web开发中一个很常见的方法.对于一些耗时耗资源的操作,往往从主应用中隔离,通过异步的方式执行.简 ...

  9. 独立两套DJANGO+CELERY配置(生产+测试)时要注意的一些细节

    1,生产的NGINX环境,要指定自己的目录,而不是PROJ默认的. upstream ism_host { server ; } server { listen ; server_name local ...

随机推荐

  1. Java面试问题汇总

    转一些面试经验 刚看到下面这份面试清单,从个人的开发面试经历看,里面总结的大部分内容还是很不错的.年后想跳槽的朋友可以选取里面的问题准备一下. GitHub上的面试总结帖 Interview-Note ...

  2. Django学习笔记之视图高级-HTTP请求与响应

    Django限制请求method 常用的请求method GET请求 GET请求一般用来向服务器索取数据,但不会向服务器提交数据,不会对服务器的状态进行更改.比如向服务器获取某篇文章的详情. POST ...

  3. JIT(Just in time,即时编译,边运行边编译)、AOT(Ahead Of Time,运行前编译),是两种程序的编译方式

    JIT(Just in time,即时编译,边运行边编译).AOT(Ahead Of Time,运行前编译),是两种程序的编译方式

  4. HTTP协议初步解析

    一.什么是HTTP协议 HTTP是hypertext transfer protocol(超文本传输协议)的简写,它是TCP/IP协议的一个应用层协议,定义了Web客户端向Web服务器请求Web页面的 ...

  5. Share Today

    当问[一生中最大的错误是什么?]时,佛陀回答: 最大的错误就是你以为你还有时间 时间是免费的也是无价的 你无法拥有 但可以花费 而一旦失去 就无法挽回 一般人一生有78年 我们有28.3年在睡觉 几乎 ...

  6. 搭建一个microblaze的最小系统

    搭建一个microblaze的最小系统 首先例化一个microblaze核 对microblaze核进行配置 勾选: 这个是使能外部存储BRAM作为程序运行缓冲区 第二个是需要勾选 这个是使能AXI数 ...

  7. discuz 模板中使用方法和语言标签

    一.如何调用方法? 关于模板中eval的使用{eval php 语句} 比如:<!--{eval echo "Hello World!"}--> 例如在discuz的手 ...

  8. win10 vs2015源码编译tesseract4.0

    1.安装软件 cmake  下载地址 cppan   下载地址 安装完毕后,需要将cmake.exe和cppan.exe加入环境变量PATH中 cmake简介 CMake全称为“cross platf ...

  9. DES加密算法—实现(C语言)

    http://www.iteye.com/topic/478024 DES(Data Encrypt Standard数据库加密标准)是迄今为止使用最广泛的加密体制. 初学信息安全的新生,一般都会被老 ...

  10. OPPO R6007在哪里打开usb调试模式的完美流程

    当我们使用Pc接通安卓手机的时候,如果手机没有开启USB开发者调试模式,Pc则无法成功读到我们的手机,遇到此种情况我们需要想方设法将手机的USB开发者调试模式打开,以下内容我们讲解OPPO R6007 ...