本文首发于公众号: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. GUI编程实战--贪吃蛇

    GUI编程实战--贪吃蛇 参考:遇见狂神说 https://space.bilibili.com/95256449 界面绘制 帧:如果时间片足够小,就是动画,一秒30帧.连起来是动画,拆开是静态的图片 ...

  2. salesforce零基础学习(一百一十六)workflow -> flow浅谈

    本篇参考: https://help.salesforce.com/s/articleView?id=sf.migrate_to_flow_tool_considerations_workflow.h ...

  3. openwrt 刷回梅林或者原厂固件

    路由器刷了openwrt固件后,访问不了CFE恢复模式了.本人最近用腾达AC18路由器,刷了AC68U的梅林改版固件.但是后面再用CFE刷了openwrt固件之后,发现wifi不能用,所以又想刷回梅林 ...

  4. day04-SpringCloud Eureka-服务注册与发现01

    SpringCloud Eureka-服务注册与发现01 1.Eureka介绍 1.1学习Eureka前的说明 目前主流的服务注册&发现的组件是 Nacos,但是 Eureka 作为老牌经典的 ...

  5. 二进制安装k8s v1.25.4 IPv4/IPv6双栈

    二进制安装k8s v1.25.4 IPv4/IPv6双栈 https://github.com/cby-chen/Kubernetes 开源不易,帮忙点个star,谢谢了 介绍 kubernetes( ...

  6. AF_XDP技术简介

    本文分享自天翼云开发者社区@<AF_XDP技术简介>,作者: l****n 一.概述 AF_XDP 是一项新增的,针对高性能数据包处理进行优化的地址族协议.本文档假设读者已经熟悉 BPF ...

  7. MAPPO学习笔记(1):从PPO算法开始

    由于这段时间的学习内容涉及到MAPPO算法,并且我对MAPPO算法这种多智能体算法的信息交互机制不甚了解,于是写了这个系列的笔记,目的是巩固知识,并且进行一些粗浅又滑稽的总结. 1.PPO算法的介绍 ...

  8. vue中父组件给子组件传值的方法

    顺序............................................. -------------列表组件,注册组件.调用使用组件----------------- 1,子组件 ...

  9. day08-优惠券秒杀04

    功能03-优惠券秒杀04 4.功能03-优惠券秒杀 4.7Redis优化秒杀 4.7.1优化分析 现在来回顾一下优惠券秒杀业务的两个主要问题: (1)首先是对优惠券的扣减,需要防止库存超卖现象: (2 ...

  10. Docker compose单机编排工具

    Docker compose单机编排工具 目录 Docker compose单机编排工具 docker-compose介绍 Docker Compose使用的三步: docker-compose安装部 ...