带有 Redis 的 Celery 与单独的 Redis

Celery with Redis vs Redis Alone

我无法理解使用 Celery 的优势是什么。我知道你可以将 Celery 与 Redis、RabbitMQ 等一起使用,但为什么我不直接获取这些消息队列服务的客户端,而不是让 Celery 放在它前面?

使用Celery 的好处是我们主要需要编写任务处理代码,而任务传递到任务处理器的处理则由Celery 框架负责。扩展任务处理也很容易,只需 运行 以更高的并发性(更多的处理 threads/processes)配置更多的 Celery worker。我们甚至不需要编写将任务提交到队列和从队列中消费任务的代码。 此外,它还为任何任务队列内置了 add/removing 消费者的设施。该框架支持任务重试、失败处理、结果累积等。它有许多特性可以帮助我们只专注于实现任务处理逻辑。

打个比方,在 Hadoop 上 运行 实现 map-reduce 程序并不是一项非常复杂的任务。如果数据很小,我们可以编写一个简单的 Python 脚本来实现 map-reduce 逻辑,这将优于处理相同数据的 Hadoop map-reduce 作业。但是当数据非常大的时候,我们要跨机器分数据,我们就需要运行跨机器的多个进程,并协调它们的执行。复杂性在于 运行 多个映射器实例,然后跨多台机器执行 reducer 任务,收集输入并将输入分发给映射器,将映射器的输出传输到适当的 reducer,监控进度,重新启动失败的任务,检测作业完成等等 但是因为我们有 Hadoop,所以我们不需要太在意执行分布式作业的潜在复杂性。同样,Celery 也可以帮助我们主要关注任务执行逻辑。