以下是在尝试回答这个完全相同的问题时我所找到的内容。它可能不全面,甚至在某些方面可能不准确。
简而言之,RQ旨在全面简化。Celery旨在更加强大。它们都很出色。
操作系统支持。Celery是明显的赢家,因为RQ只能在支持fork
的系统上运行,例如Unix系统。
语言支持。RQ仅支持Python,而Celery可以让您从一种语言发送任务到另一种语言。
API。Celery非常灵活(多个结果后端、良好的配置格式、工作流画布支持),但这种强大往往会让人感到困惑。相比之下,RQ的api非常简单。
子任务支持。Celery支持子任务(例如从现有任务创建新任务)。我不知道RQ是否支持。
社区和稳定性。Celery可能更加成熟,但它们都是活跃的项目。截至撰写本文时,Celery在Github上有约3500颗星,而RQ有约2000颗星,并且两个项目都显示出积极的发展。
我的看法是,Celery并不像它的声誉所表明的那样复杂,但你需要阅读文档。
那么,为什么有人愿意用RQ来换取(可以说更全面的)Celery呢?在我看来,这完全取决于简单性。通过限制自己只使用Redis+Unix,RQ提供了更简单的文档、更简单的代码库和更简单的API。这意味着您(以及潜在的项目贡献者)可以专注于您关心的代码,而不必将任务队列系统的细节记在工作记忆中。我们所有人都有一个可以同时保留多少细节的限制,通过去除需要在其中保留任务队列细节的需求,RQ让您专注于关心的代码。这种简单性以牺牲诸如跨语言任务队列、广泛的操作系统支持、100%可靠的消息保证和轻松切换消息代理等功能为代价。
Redis
、Pipeline
、PubSub
类),那么你可以使用任何代理。 - Kostas MouratidisCelery并不是很复杂。在其核心中,您可以从tutorials
逐步进行配置,创建一个celery
实例,使用@celery.task
装饰您的函数,然后使用my_task.delay(*args, **kwargs)
运行任务。
根据您自己的评估,似乎您必须在缺少(关键)功能或有一些多余的东西之间做出选择。在我看来,这并不是太难的选择。