共计 2986 个字符,预计需要花费 8 分钟才能阅读完成。
本文首发于公众号: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 的调用。
如果想获取更多后端相干文章,可扫码关注浏览: