翼度科技»论坛 编程开发 python 查看内容

celery笔记二之建立celery项目、配置及几种加载方式

10

主题

10

帖子

30

积分

新手上路

Rank: 1

积分
30
本文首发于公众号:Hunter后端
原文链接:celery笔记二之建立celery项目、配置及几种加载方式
接下来我们创建一个 celery 项目,文件夹及目录如下:
  1. proj/__init__.py
  2.     /celery.py
  3.     /tasks1.py
  4.     /tasks2.py
复制代码
接下来我们逐个文件向里面添加内容。
1、项目文件内容及介绍

我们建立了一个名为 proj 的文件夹作为我们的项目文件夹,其下有两个文件,celery.py 和 tasks.py
celery.py
其中 celery.py 内容为 celery 实例化以及一些基础配置,文件内容如下:
  1. from celery import Celery
  2. app = Celery('proj',
  3.              broker='redis://localhost/0',
  4.              backend='redis://localhost/1',
  5.              include=['proj.tasks1', 'proj.tasks2'])
  6. app.conf.update(
  7.     result_expires=60
  8. )
  9. if __name__ == '__main__':
  10.     app.start()
复制代码
在这里,我们还是对 celery 进行了实例化的操作,但是在这里项目名称改为了 proj,也就是这个文件的上一级文件夹名称
broker、backend 还是对应的配置
但是因为对应的任务我们是单独以文件的形式引入,所以,在这里引入的方式是通过 include 的方式来实现的
app.conf.update() 是对 celery 配置的补充,这里只加了一个参数,表示是对系统对结果的留存时间。
另外几种配置方式我们放在下面详讲。
接着 app.start() 就是项目的启动。
tasks.py
在这里我们将 task 作为两部分拆解,分别放在两个文件下,内容分别如下
  1. #tasks1.py
  2. from .celery import app
  3. @app.task
  4. def add(x, y):
  5.     return x + y
复制代码
  1. #tasks2.py
  2. from .celery import app
  3. @app.task
  4. def mul(x, y):
  5.     return x * y
复制代码
启动服务,在 proj 所在的文件夹,执行下面的命令:
  1. celery -A proj worker -l INFO
复制代码
运行延时任务
在 proj 同级的文件夹下执行 python3,进入 python 的交互界面:
  1. from proj.tasks1 import add
  2. add.delay(1, 2)
复制代码
2、celery配置的几种方式

在上面的 celery 的配置方式,是一部分写在 celery 的实例化过程中,另一部分是通过 app.conf.update() 的方式写入
这里介绍一下,celery 的配置还可以通过类的方式来写入,或者把所有变量都写入一个文件,通过引入文件的形式来引入变量。
不管是以类的方式还是文件的形式都会使用到一个方法:config_from_object(),参数为需要引入的变量
类的方式加载配置
下面是一个类的方式引入的示例:
  1. # celery.py
  2. from celery import Celery
  3. app = Celery()
  4. class Config:
  5.     include = ['proj.tasks1', 'proj.tasks2']
  6.     broker_url = 'redis://localhost:6379/0'
  7.     result_backend = 'redis://localhost:6379/1'
  8.    
  9. app.config_from_object(Config)
  10. if __name__ == '__main__':
  11.     app.start()
复制代码
这里需要注意的是在 Config 中的 broker_url 和 result_backend 与直接实例化 Celery 时写入的参数名称是不一样的
文件的形式加载配置
接下来我们在 proj 的文件夹中新建一个文件 celeryconfig.py,那么 proj 文件夹下的文件配置则如下:
  1. proj/__init__.py
  2.     /celery.py
  3.     /celeryconfig.py
  4.     /tasks1.py
  5.     /tasks2.py
复制代码
配置文件内容:
  1. # celeryconfig.py
  2. broker_url = 'redis://localhost/0'
  3. result_backend = 'redis://localhost/1'
  4. include = ['proj.tasks1', 'proj.tasks2']
复制代码
celery 文件内容:
  1. # celery.py
  2. from celery import Celery
  3. from . import celeryconfig
  4. app = Celery()
  5. app.config_from_object(celeryconfig)
  6. if __name__ == '__main__':
  7.     app.start()
复制代码
无论是把配置写入 Config 类中,还是写入文件,这里的思想都是将配置集中处理,在一处管理所有的配置内容。
注意:
在这里我们引入配置的方式都是 config_from_object(),我们之前还介绍过一个更新配置的方式是 app.conf.update()
这里要说明的是,只要运行了 config_from_object() 函数,在此之前的变量都会被覆盖失效,如果我们要新增 celeryconfig 之外的配置,则需要在调用 config_from_object() 函数之后调用,比如:
  1. app = Celery()
  2. app.conf.update(result_expires=60) # 在 config_from_config() 之前调用,会失效
  3. app.config_from_object(celeryconfig)
  4. app.conf.update(result_expires=30)  # 这个配置会生效
复制代码
还有一种引入配置的方式是在 Django 系统中,将 Celery 相关的变量都写入 settings.py,然后通过 namespace 的方式引入到 Celery 中进行实例化处理。
这个方式我们在介绍 celery 与 Django 结合的时候再做介绍。
3、一些基本配置

设置时区
比如我们设置北京时间:
  1. app.conf.update(
  2.     enable_utc=False,
  3.     timezone='Asia/Shanghai',
  4. )
复制代码
broker 和 result_backend 设置
设置 broker 和 result_backend 的地址:
  1. app.conf.update(
  2.     broker_url = 'redis://localhost:6379/0'
  3.     result_backend = 'redis://localhost:6379/1'
  4. )
复制代码
如果是 broker 和 backend 加密码的配置,则是如下:
  1. app.conf.update(
  2.     broker_url = 'redis://:123456@localhost:6380/0'
  3.     result_backend = 'redis://:123456@localhost:6380/1'
  4. )
复制代码
其中,123456 是密码。
如果是用 docker 启动一个带密码的 redis,命令如下:
  1. docker run -d --name redis_pwd -p6380:6379 redis:latest --requirepass 123456
复制代码
此外还有一些任务队列 queue、默认队列、任务路由配置、定时任务的设置,在后面介绍到的时候再一一介绍。
下一篇笔记将介绍 task 和 task 的调用。
如果想获取更多后端相关文章,可扫码关注阅读:


来源:https://www.cnblogs.com/hunterxiong/p/17452888.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

举报 回复 使用道具