celery(一) application
Application
application
- celery在使用之前,必须首先实例化。e.g.
app = Celery() - 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。
- 在装饰器中指定其他类
@app.task(base=OtherTask)
def function():
...
- 在配置中指定其他类
app = Celery()
app.Task = OtherTask
自定义 Task
所有的自定义 Task 都必须
继承自 Task 类
class MyTask(Task):
...
最佳实践是 app 作为参数传给需要它的地方
class SomeClass:
def __init__(self, app):
self.app = app
...
celery(一) application的更多相关文章
- 【理论】python使用celery异步处理请求
Flask中使用celery队列处理执行时间较长的请求. 一. 安装celery pip install celery flask redis 二. celery简介 Celery是个异步分布式任务队 ...
- day102:MoFang:后端完成对短信验证码的校验&基于celery完成异步短信发送&flask_jwt_extended&用户登录的API接口
目录 1.用户注册 1.后端完成对短信验证码的校验 2.基于celery实现短信异步发送 2.用户登录 1.jwt登录验证:flask_jwt_extended 2.服务端提供用户登录的API接口 1 ...
- cellery ImportError & AttributeError
一.zz的问题 celery 运行work要进入到 文件所在的文件夹下执行 二.AttributeError: 'Flask' object has no attribute 'user_option ...
- day121:MoFang:植物的状态改动(幼苗→成长期)&植物的浇水功能
目录 1.当果树种植以后在celery的异步任务中调整浇水的状态 2.客户端通过倒计时判断时间,显示浇水道具 3.客户端判断当前种植物状态控制图标的显示和隐藏 4.当用户单击浇水图标, 则根据当前果树 ...
- Celery(三)实例Application
Celery必须实例化后才可以使用,实例称之为application或者简称app.实例是线程安全的,多个Celery实例(不同的配置.部件和任务)都可以在一个进程空间中运行. 创建一个最简单的app ...
- Celery,Tornado,Supervisor构建和谐的分布式系统
Celery 分布式的任务队列 与rabbitmq消息队列的区别与联系: rabbitmq 调度的是消息,而Celery调度的是任务. Celery调度任务时,需要传递参数信息,传输载体可以选择rab ...
- celery简单入门
写作背景介绍 最近在做后台图像处理,需要使用到celery这个异步任务框架.但是使用的时候遇到很多技术问题,为了方便日后再遇到相似问题时能够快速解决.写下这篇文章也希望能够帮助共同奋战在同一战线的程序 ...
- 异步任务神器 Celery 简明笔记
转自:http://www.jianshu.com/p/1840035cb510 异步任务 异步任务是web开发中一个很常见的方法.对于一些耗时耗资源的操作,往往从主应用中隔离,通过异步的方式执行.简 ...
- 独立两套DJANGO+CELERY配置(生产+测试)时要注意的一些细节
1,生产的NGINX环境,要指定自己的目录,而不是PROJ默认的. upstream ism_host { server ; } server { listen ; server_name local ...
随机推荐
- Spring Boot的日志配置
一.配置logback日志 Spring Boot默认使用logback打印日志 需要增加依赖 <groupId>org.springframework.boot</groupId& ...
- SqlServer :实现树形结构递归查询(无限极分类)
SQL Server 2005开始,我们可以直接通过CTE来支持递归查询,CTE即公用表表达式 公用表表达式(CTE),是一个在查询中定义的临时命名结果集将在from子句中使用它.每个CTE仅被定义一 ...
- 开发者必备的 12 个 JavaScript 库
现在 web 设计是最有趣的了,做好 web 设计不仅要熟练使用 Javascript,css 和 html 等,还要有自己的创意设计.为了方便大家发挥自己的创意,就产生了很多 JS 框架,Node. ...
- SecureCRT 6.7 vim高亮
cp /etc/vimrc ~/.vimrc set nocompatible "去掉有关vi一致性模式,避免以前版本的bug和局限 set nu! ...
- htm,css,javascript及其他的注释方式
转自:http://www.cnblogs.com/dapeng111/archive/2012/12/23/2829774.html 一.HTML的注释方法<!-- html注释:START ...
- YARN简述
YARN(Yet Another Resource Negotiator)是Hadoop的集群资源管理系统.YARN提供请求和使用集群资源的API,但这些API很少直接用于用户代码.相反,用户代码中用 ...
- Git常用的操作记录(自用)
分支常用操作命令 $ git branch -a //查看分支 $ git checkout -b dev origin/master //切换/创建分支 $ git branch -vv 或 gi ...
- http/https协议
HTTP 1. 概念 HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览 ...
- [UE4]瞬移之后的朝向
一.Set Actor Rotation:设置绝对朝向:Set Actor Relative Rotation:设置相对朝向 二.瞬移以后,角色的朝向和相机的朝向是不一样的,和头显的朝向不是同一个朝向 ...
- ionic2 调用 cordova非本地化native 插件方法
1,在项目中添加你的插件 cordova plugin add puginId|puginName|puginUrl|puginPath 2,查看插件clobbers标记 打开项目目录plug ...