celery笔记二之建立celery项目、配置及几种加载方式
本文首发于公众号:Hunter后端
原文链接:celery笔记二之建立celery项目、配置及几种加载方式
接下来我们创建一个 celery 项目,文件夹及目录如下:
proj/__init__.py
/celery.py
/tasks1.py
/tasks2.py
接下来我们逐个文件向里面添加内容。
1、项目文件内容及介绍
我们建立了一个名为 proj 的文件夹作为我们的项目文件夹,其下有两个文件,celery.py 和 tasks.py
celery.py
其中 celery.py 内容为 celery 实例化以及一些基础配置,文件内容如下:
from celery import Celery
app = Celery('proj',
broker='redis://localhost/0',
backend='redis://localhost/1',
include=['proj.tasks1', 'proj.tasks2'])
app.conf.update(
result_expires=60
)
if __name__ == '__main__':
app.start()
在这里,我们还是对 celery 进行了实例化的操作,但是在这里项目名称改为了 proj,也就是这个文件的上一级文件夹名称
broker、backend 还是对应的配置
但是因为对应的任务我们是单独以文件的形式引入,所以,在这里引入的方式是通过 include 的方式来实现的
app.conf.update() 是对 celery 配置的补充,这里只加了一个参数,表示是对系统对结果的留存时间。
另外几种配置方式我们放在下面详讲。
接着 app.start() 就是项目的启动。
tasks.py
在这里我们将 task 作为两部分拆解,分别放在两个文件下,内容分别如下
#tasks1.py
from .celery import app
@app.task
def add(x, y):
return x + y
#tasks2.py
from .celery import app
@app.task
def mul(x, y):
return x * y
启动服务,在 proj 所在的文件夹,执行下面的命令:
celery -A proj worker -l INFO
运行延时任务
在 proj 同级的文件夹下执行 python3,进入 python 的交互界面:
from proj.tasks1 import add
add.delay(1, 2)
2、celery配置的几种方式
在上面的 celery 的配置方式,是一部分写在 celery 的实例化过程中,另一部分是通过 app.conf.update() 的方式写入
这里介绍一下,celery 的配置还可以通过类的方式来写入,或者把所有变量都写入一个文件,通过引入文件的形式来引入变量。
不管是以类的方式还是文件的形式都会使用到一个方法:config_from_object(),参数为需要引入的变量
类的方式加载配置
下面是一个类的方式引入的示例:
# celery.py
from celery import Celery
app = Celery()
class Config:
include = ['proj.tasks1', 'proj.tasks2']
broker_url = 'redis://localhost:6379/0'
result_backend = 'redis://localhost:6379/1'
app.config_from_object(Config)
if __name__ == '__main__':
app.start()
这里需要注意的是在 Config 中的 broker_url 和 result_backend 与直接实例化 Celery 时写入的参数名称是不一样的
文件的形式加载配置
接下来我们在 proj 的文件夹中新建一个文件 celeryconfig.py,那么 proj 文件夹下的文件配置则如下:
proj/__init__.py
/celery.py
/celeryconfig.py
/tasks1.py
/tasks2.py
配置文件内容:
# celeryconfig.py
broker_url = 'redis://localhost/0'
result_backend = 'redis://localhost/1'
include = ['proj.tasks1', 'proj.tasks2']
celery 文件内容:
# celery.py
from celery import Celery
from . import celeryconfig
app = Celery()
app.config_from_object(celeryconfig)
if __name__ == '__main__':
app.start()
无论是把配置写入 Config 类中,还是写入文件,这里的思想都是将配置集中处理,在一处管理所有的配置内容。
注意:
在这里我们引入配置的方式都是 config_from_object(),我们之前还介绍过一个更新配置的方式是 app.conf.update()
这里要说明的是,只要运行了 config_from_object() 函数,在此之前的变量都会被覆盖失效,如果我们要新增 celeryconfig 之外的配置,则需要在调用 config_from_object() 函数之后调用,比如:
app = Celery()
app.conf.update(result_expires=60) # 在 config_from_config() 之前调用,会失效
app.config_from_object(celeryconfig)
app.conf.update(result_expires=30) # 这个配置会生效
还有一种引入配置的方式是在 Django 系统中,将 Celery 相关的变量都写入 settings.py,然后通过 namespace 的方式引入到 Celery 中进行实例化处理。
这个方式我们在介绍 celery 与 Django 结合的时候再做介绍。
3、一些基本配置
设置时区
比如我们设置北京时间:
app.conf.update(
enable_utc=False,
timezone='Asia/Shanghai',
)
broker 和 result_backend 设置
设置 broker 和 result_backend 的地址:
app.conf.update(
broker_url = 'redis://localhost:6379/0'
result_backend = 'redis://localhost:6379/1'
)
如果是 broker 和 backend 加密码的配置,则是如下:
app.conf.update(
broker_url = 'redis://:123456@localhost:6380/0'
result_backend = 'redis://:123456@localhost:6380/1'
)
其中,123456 是密码。
如果是用 docker 启动一个带密码的 redis,命令如下:
docker run -d --name redis_pwd -p6380:6379 redis:latest --requirepass 123456
此外还有一些任务队列 queue、默认队列、任务路由配置、定时任务的设置,在后面介绍到的时候再一一介绍。
下一篇笔记将介绍 task 和 task 的调用。
如果想获取更多后端相关文章,可扫码关注阅读:

celery笔记二之建立celery项目、配置及几种加载方式的更多相关文章
- Android学习笔记_50_(转 四种加载方式详解(standard singleTop singleTask singleInstance)
Android之四种加载方式 (http://marshal.easymorse.com/archives/2950 图片) 在多Activity开发中,有可能是自己应用之间的Activity跳转,或 ...
- 二、从GitHub浏览Prism示例代码的方式入门WPF下的Prism之Modules的几种加载方式
这一篇梳理Prism中07示例Module的几种加载方式. 07示例分为了5个,有5种不同的Module加载方式. 我们开始学习加载Modules 观察07-Modules-Appconfig示例 分 ...
- SSH框架项目配置和启动的加载顺序及请求的执行顺序
1:======配置和启动====== (1)配置web.xml 配置<context-param>,其中内容为Spring的配置文件applicationContext.xml.注意&l ...
- Git 笔记二-Git安装与初始配置
git 笔记二-Git安装与初始配置 Git的安装 由于我日常生活和工作基本上都是在Windows上,因此此处只说windows上的安装.Windows上的安装和其他程序一样,只需要到http://g ...
- 配置项目启动的时候就加载 servlet
load-on-startup值为0 就是在项目启动的时候自动加载该servlet
- 【设计经验】3、ISE中烧录QSPI Flash以及配置mcs文件的加载速度与传输位宽
一.软件与硬件平台 软件平台: 操作系统:Windows 7 64-bit 开发套件:ISE14.7 硬件平台: FPGA型号:XC6SLX45-CSG324 QSPI Flash型号:W25Q128 ...
- Java之——Web项目中DLL文件动态加载方法
本文转自:https://blog.csdn.net/l1028386804/article/details/53903557 在Java Web项目中,我们经常会用到通过JNI调用dll动态库文件来 ...
- 下载安装与配置Excel 2013数据挖掘加载项(SQL Server 2012 SP1 + SQLServer2012_DMAddin.msi)
一.系统要求 在安装这个数据挖掘加载项前,你的机器必须要可以支持如下的相关系统设备: (1)操作系统:windows 7 和 windows 8,暂时不支持 windows 10. (2)excel ...
- Spring Cloud Alibaba基础教程:Nacos配置的多文件加载与共享配置
前情回顾: <Spring Cloud Alibaba基础教程:使用Nacos实现服务注册与发现> <Spring Cloud Alibaba基础教程:支持的几种服务消费方式> ...
- vue+webpack项目打包后背景图片加载不出来问题解决
在做VUE +的WebPack脚手架项目打包完成后,在IIS服务器上运行发现项目中的背景图片加载不出来检查项目代码发现是因为CSS文件中,背景图片引用的路径问题;后来通过修改配置文件,问题终于解决了, ...
随机推荐
- koa中间件的实现原理
koa中间件的实现原理如何?先来看一个例子. koa的执行顺序是这样的: const middleware = async function (ctx, next) { console.log(1) ...
- 【ACM算法竞赛日常训练】DAY2题解与分析【比赛】【数学考试】【简单瞎搞题】
DAY2共三题: 比赛(概率) 数学考试(前缀和与思维) 简单瞎搞题(dp) 视频讲解:https://www.bilibili.com/video/BV1hP411o7RD/ 作者:Eriktse ...
- dark room - 2020 年苹果设计奖得主,一个足够强大的照片视频编辑器
2020年苹果设计奖得主 2015年App Store最佳应用 Darkroom 是一个高级照片和视频编辑器.它对业余摄影师来说很容易操作,但对专业摄影师来说足够强大. 下载 ➤ Darkroom 下 ...
- ArcGIS JS API加载带参数的rest服务参数被截掉问题处理
我们在做一些项目的时候,会对ArcGIS的图层服务进行转发,增加一些权限参数以保证数据访问的安全, 但使用ArcGIS JS API加载的时候,对于rest服务?后增加的参数会被截掉. 为解决这个问题 ...
- Django之admin后台管理
目录 创建超级用户 向页面中添加表 admin管理页面表名中文显示 创建超级用户 python manage.py createsuperuser 向页面中添加表 登录后,页面中是什么都没有的,还需要 ...
- [Linux]Linux执行sh脚本时,出现$‘\r‘: command not found(未找到命令)"错误的解决方案[转载]
1 文由 为什么要把这么一个看似很简单的问题,还要以[转载]的方式专门用博客写出来? 主要是在编写crontab的自动化定时脚本的过程中,发现是这个错导致的自动化脚本频繁执行异常时,已经花了好几个小时 ...
- [大数据]Hadoop简述
1 Hadoop:发展沿革 摘要:1个人(Doug Cutting).2个公司(Google.Cloudera) 1.1 渊源 Hadoop项目 最初开发者/创始者: Doug Cutting(道格· ...
- RxJava--create源码分析
使用示例: Observable.create(new ObservableOnSubscribe<String>() { @Override public void subscribe( ...
- 解决svn本身上传没有权限和配置自动更新的钩子
第一步 :建立你的web程序目录和版本库目录 mkdir /data/webwww/project1 svnadmin create /data/svnwww/project1 进入/data/web ...
- 【前端基础】(二)promise异步编排
☆promise异步编排 javascript众所周知只能支持单线程,因此各种网络请求必须异步发送,导致可能会出现很多问题,比如如下我们有三个文件,现在要求进行如下请求: ① 查出当前用户信息 ② 根 ...