本文首发于公众号: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. etcd详解

    etcd原理详解 etcd概述 etcd的特点 etcd是一个Go言编写的分布式.高可用的一致性键值存储系统,用于提供可靠的分布式键值存储.配置共享和服务发现等功能 etcd具有以下特点: 简单: 易 ...

  2. 从零开始学Java系列之如何使用记事本编写java程序

    前言 在上一篇文章中,壹哥给大家介绍了Java中的标识符及其命名规则.规范,Java里的关键字和保留字,以及Java中的编码规范. 我们在之前编写案例时,使用的开发工具都是windows自带的txt记 ...

  3. Spring事务的底层原理

    1. 划分处理单元--IOC 由于spring解决的问题是对单个数据库进行局部事务处理的,具体的实现首相用spring 中的IOC划分了事务处理单元.并且将对事务的各种配置放到了ioc容器中(设置事务 ...

  4. RunnerGo可视化场景管理,还原真实场景

    在进行性能测试时,测试场景的正确配置非常关键.首先,需要根据业务场景和需求,设计出合理的测试场景,再利用相应的工具进行配置,实现自动化的性能测试. 在JMeter中,用户需要自己组织测试场景,或是在同 ...

  5. Skywalking搭建

    因毕设前端太丑,所以后端要稍微搞的高大上一点才能忽悠住老师,所以分享一下搭建skywalking的步. 我是参考https://baijiahao.baidu.com/s?id=17211835411 ...

  6. uniApp安卓离线SDK运行

    一.下载uniapp提供的离线SDK包 下载地址:https://nativesupport.dcloud.net.cn/AppDocs/download/android 版本:2022年09月26日 ...

  7. python入门教程之八列表,字典,字符串,集合常用操作

    一列表常用方法 Python包含以下函数: 序号 函数 1 cmp(list1, list2)比较两个列表的元素 2 len(list)列表元素个数 3 max(list)返回列表元素最大值 4 mi ...

  8. 9.springSecurity整合OAuth2结合Jwt实现单点登录

    1.总结:昨天主要是继续完善OAuth2配合将问题完成单点登录,昨天也应证了一个认证服务,两个客户端服务在登陆一次后可以访问两个客户端的页面,也算是完成了单点登录   2.具体实现 首先是使用java ...

  9. 深入理解 python 虚拟机:字节码教程(2)——控制流是如何实现的?

    深入理解 python 虚拟机:字节码教程(2)--控制流是如何实现的? 在本篇文章当中主要给大家分析 python 当中与控制流有关的字节码,通过对这部分字节码的了解,我们可以更加深入了解 pyth ...

  10. Python程序笔记20230301

    打印九九乘法表 for i in range(1, 10): for j in range(1, i+1): print(i, "x", j, "=", i * ...