Celery 常用配置文件
续上篇文章 Celery 异步任务
异步任务神器 Celery 简单实用
https://www.168seo.cn/python/24932.html
在上面的例子中,我们直接把 Broker 和 Backend 的配置写在了程序当中,更好的做法是将配置项统一写入到一个配置文件中,通常我们将该文件命名为 celeryconfig.py
。Celery 的配置比较多,可以在官方文档查询每个配置项的含义。
下面,我们再看一个例子。项目结构如下:
1 2 3 4 5 6 7 8 9 |
➜ zeropython tree celery_demo celery_demo # 项目根目录 ├── celery_app # 存放celery相关文件 │ ├── __init__.py │ ├── celeryconfig.py #配置文件 │ ├── task1.py # 任务1 │ └── task2.py # 任务2 └── client.py #应用程序 |
__init__.py
内容如下

celeryconfig.py 内容

task1.py
代码如下:

task2.py
代码如下:

client.py
代码如下:

现在,让我们启动 Celery Worker 进程,在项目的根目录下执行下面命令:
1 2 |
➜ celery_demo celery -A celery_app worker --loglevel=info |

接着,运行 $ python client.py
,它会发送两个异步任务到 Broker,在 Worker 的窗口我们可以看到如下输出:

delay 和 apply_async
在前面的例子中,我们使用 delay()
或 apply_async()
方法来调用任务。事实上,delay
方法封装了 apply_async
,如下:
1 2 3 4 |
def delay(self, *partial_args, **partial_kwargs): """Shortcut to :meth:`apply_async` using star arguments.""" return self.apply_async(partial_args, partial_kwargs) |
也就是说,delay
是使用 apply_async
的快捷方式。apply_async
支持更多的参数,它的一般形式如下:
1 2 |
apply_async(args=(), kwargs={}, route_name=None, **options) |
apply_async 常用的参数如下:
- countdown:指定多少秒后执行任务
1 2 |
task1.apply_async(args=(2, 3), countdown=5) # 5 秒后执行任务 |
- eta (estimated time of arrival):指定任务被调度的具体时间,参数类型是 datetime
1 2 3 4 5 |
from datetime import datetime, timedelta # 当前 UTC 时间再加 10 秒后执行任务 task1.multiply.apply_async(args=[3, 7], eta=datetime.utcnow() + timedelta(seconds=10)) |
- expires:任务过期时间,参数类型可以是 int,也可以是 datetime
1 2 |
task1.multiply.apply_async(args=[3, 7], expires=10) # 10 秒后过期 |
更多的参数列表可以在官方文档中查看。
