本文首发于公众号: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项目、配置及几种加载方式的更多相关文章

  1. Android学习笔记_50_(转 四种加载方式详解(standard singleTop singleTask singleInstance)

    Android之四种加载方式 (http://marshal.easymorse.com/archives/2950 图片) 在多Activity开发中,有可能是自己应用之间的Activity跳转,或 ...

  2. 二、从GitHub浏览Prism示例代码的方式入门WPF下的Prism之Modules的几种加载方式

    这一篇梳理Prism中07示例Module的几种加载方式. 07示例分为了5个,有5种不同的Module加载方式. 我们开始学习加载Modules 观察07-Modules-Appconfig示例 分 ...

  3. SSH框架项目配置和启动的加载顺序及请求的执行顺序

    1:======配置和启动====== (1)配置web.xml 配置<context-param>,其中内容为Spring的配置文件applicationContext.xml.注意&l ...

  4. Git 笔记二-Git安装与初始配置

    git 笔记二-Git安装与初始配置 Git的安装 由于我日常生活和工作基本上都是在Windows上,因此此处只说windows上的安装.Windows上的安装和其他程序一样,只需要到http://g ...

  5. 配置项目启动的时候就加载 servlet

    load-on-startup值为0 就是在项目启动的时候自动加载该servlet

  6. 【设计经验】3、ISE中烧录QSPI Flash以及配置mcs文件的加载速度与传输位宽

    一.软件与硬件平台 软件平台: 操作系统:Windows 7 64-bit 开发套件:ISE14.7 硬件平台: FPGA型号:XC6SLX45-CSG324 QSPI Flash型号:W25Q128 ...

  7. Java之——Web项目中DLL文件动态加载方法

    本文转自:https://blog.csdn.net/l1028386804/article/details/53903557 在Java Web项目中,我们经常会用到通过JNI调用dll动态库文件来 ...

  8. 下载安装与配置Excel 2013数据挖掘加载项(SQL Server 2012 SP1 + SQLServer2012_DMAddin.msi)

    一.系统要求 在安装这个数据挖掘加载项前,你的机器必须要可以支持如下的相关系统设备: (1)操作系统:windows 7 和  windows 8,暂时不支持 windows 10. (2)excel ...

  9. Spring Cloud Alibaba基础教程:Nacos配置的多文件加载与共享配置

    前情回顾: <Spring Cloud Alibaba基础教程:使用Nacos实现服务注册与发现> <Spring Cloud Alibaba基础教程:支持的几种服务消费方式> ...

  10. vue+webpack项目打包后背景图片加载不出来问题解决

    在做VUE +的WebPack脚手架项目打包完成后,在IIS服务器上运行发现项目中的背景图片加载不出来检查项目代码发现是因为CSS文件中,背景图片引用的路径问题;后来通过修改配置文件,问题终于解决了, ...

随机推荐

  1. Latex符号

    上标 $\hat{x}$ : \(\hat{x}\) $\widehat{x}$ : \(\widehat{x}\) $\tilde{x}$ : \(\tilde{x}\) $\widetilde{x ...

  2. Nacos 服务发现

    更多内容,前往 IT-BLOG 一.Nacos 简介 Nacos 是阿里的一个开源产品,它是针对微服务架构中的服务发现.配置管理.服务治理的综合型解决方案.Nacos 使服务更容易注册,并通过 DNS ...

  3. 从0开始学杂项 第三期:隐写分析(2) PNG图片隐写

    Misc 学习(三) - 隐写分析:PNG 图片隐写 在上一期,我主要讲了讲自己对于隐写分析.信息搜集和直接附加的一些浅薄理解,这一期我们继续对隐写分析的学习,开始讲隐写分析最喜欢考的一项--图片隐写 ...

  4. 势如破竹的雷霆两招,微服务进阶Serverless

    ​在应用开发中,服务器的开发一直是最重要的部分之一.在服务器开发不断演进过程中,我们可以将它简单分为5个阶段: 物理机阶段->虚拟机阶段->云计算阶段->容器阶段->当前的Se ...

  5. 如何申请 Azure OpenAI

    一.前言 众所周知 OpenAI ChatGPT 是不对中国开放的,包括香港.就最近一个月的情况来看,陆续有 API 调用被限制.大规模账号封禁.关闭注册.无法直接使用银联支付(国内信用卡)等等,使用 ...

  6. 随机分布和随机数生成——R语言

    在人们的生活中,很多场景都需要用到随机数,例如福利彩票,车牌摇号,公共用房分配等.在用数学模型, 包括概率统计模型处理实际应用中的问题时, 我们希望建立的模型能够尽可能地符合实际情况.但是,实际情况是 ...

  7. 图与网络分析—R实现(三)

    最小生成树 (Minimum Spanning Tree) 应该大家都不陌生,Spanning 有跨越的意思,生成树一般来说每个节点都能访问到别的节点,是一个连通树.所以,一般考虑无向图里去造生成树. ...

  8. [操作系统/网络]Windows安装Openssh(scp / ssh等)

    1 文由 由于项目有这么一个数据同步需求: [业务建设系统方]在Linux上将Oracle的全量数据(.dmp文件)定时推送到[大数据平台建设方]中的一台Linux服务器上: 然后,[大数据平台建设方 ...

  9. 前端里那些你不知道的事儿之 【window.onload】

    作者:京东科技 孙凯 一.前言 相信很多前端开发者在做项目时同时也都做过页面性能优化,这不单是前端的必备职业技能,也是考验一个前端基础是否扎实的考点,而性能指标也通常是每一个开发者的绩效之一.尤其马上 ...

  10. LeeCode 栈与队列问题(二)

    LeeCode 239: 滑动窗口最大值 题目描述 给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧.你只可以看到在滑动窗口内的 k 个数字.滑动窗口每次只向右 ...