celery 是分布式的异步任务队列,既然是分布式,那么肯定是支持远程调度任务的,那么它是如何实现的呢?
celery 主要是通过中间人来实现远程调度的,中间人 broker 的工具如 RabbitMQ,Redis 服务支持远程访问。
由于官方的示例都是基于本地的任务调用,本文向大家展示如何使用 Celery 调用远程主机上的任务- 在主机 C 上调用主机 A 上的任务 taskA,调用主机 B 上的任务 taskB。
主机C ip地址:192.168.0.107
主机A ip地址:192.168.0.111
主机B ip地址:192.168.0.112
基于上一篇文章 分布式异步任务队列神器-Celery 中 myCeleryProj 项目的源码。
开始动手:
第一步:定义任务队列。
修改 settings.py 使任务 taskA 运行在队列 tasks_A 上,任务 taskB 运行在队列 tasks_B 上,中间人均指向主机 C 上的 redis 数据库:redis://192.168.0.107:6379/0,redis 数据库不是必须在主机C上启用,redis 数据库可运行在任意一台主机上,只要确保其允许远程访问即可。完整的settings.py如下所示
from kombu import Queue
CELERY_TIMEZONE='Asia/Shanghai'
CELERY_QUEUES = ( # 定义任务队列