优点和缺点使用芹菜与RQ
目前我正在从事python项目,需要实现一些后台作业(主要是电子邮件发送和大量数据库更新)。 我使用Redis进行任务代理。 所以在这一点上,我有两个候选人: 芹菜和RQ 。 我对这些工作队伍有一些经验,但我想请你们分享一下使用这些工具的经验。 所以。
- 什么优点和缺点使用芹菜与RQ。
- 任何适合使用芹菜与RQ的项目/任务的例子。
芹菜看起来相当复杂,但它是全function的解决scheme。 其实我不认为我需要所有这些function。 从另一方来说,RQ非常简单(例如configuration,集成),但它似乎缺less一些有用的function(例如任务撤销,代码自动重装)
这是我在尝试回答这个完全相同的问题时发现的。 这可能不全面,甚至可能在某些方面不准确。
简而言之,RQ被devise得更简单。 芹菜被devise得更加健壮。 他们都很好。
- 文档。 RQ的文档是全面的,没有复杂的,反映了项目的整体简单性 – 你永远不会感到迷茫或困惑。 芹菜的文档也是全面的,但是当你第一次设置时,期望重新访问它,因为有太多内部select
-
监测。 芹菜的花和RQ仪表板都非常简单的设置,并给你至less90%的所有信息,你会想
-
经纪人支持。 芹菜是明确的赢家,RQ只支持Redis。 这意味着“什么是经纪人”的文档就会减less,而且意味着如果Redis不再适合您,那么您将来不能转换经纪人。 例如, Instagram考虑Redis和RabbitMQ与Celery 。 这一点很重要,因为不同的经纪人有不同的保证,例如Redis 不能 (保证书面)保证100%的信息被传送。
-
优先队列。 RQ优先队列模型简单有效 – 工作人员从队列中顺序读取 。 芹菜要求转动多名工人从不同的队列消耗。 两种方法都有效
-
OS支持。 在这里,Celery是明显的赢家,因为RQ只能在支持
fork
系统上运行,例如Unix系统 -
语言支持。 RQ只支持Python,而Celery允许您将任务从一种语言发送到另一种语言
-
API。 芹菜是非常灵活的(多个结果后端,漂亮的configuration格式,工作stream程canvas支持),但自然这种力量可以混淆。 相比之下,RQ API是简单的。
-
子任务支持。 Celery支持子任务(例如,从现有任务中创build新的任务)。 我不知道RQ是否
-
社区与稳定。 芹菜可能更成熟,但他们都是积极的项目。 截至撰写时,Celery在Github上拥有约3500颗星,RQ约为2000颗,两个项目都显示出积极的发展
在我看来,Celery不像它的声誉那么复杂,可能会让你相信,但是你将不得不使用RTFM。
那么,为什么有人愿意交换(可以说是function更全的)芹菜RQ? 在我看来,这一切都归结为简单。 通过限制自己到Redis + Unix,RQ提供了更简单的文档,更简单的代码库和更简单的API。 这意味着您(以及您的项目的潜在贡献者)可以专注于您关心的代码,而不必在工作内存中保留有关任务队列系统的详细信息。 我们都有一个限制,一次可以有多less细节在我们的脑海中,通过消除保持任务队列细节的需求,RQ让我们回到您关心的代码。 这种简单性的代价是诸如跨语言任务队列,广泛的操作系统支持,100%可靠的消息保证以及轻松切换消息代理的function。
芹菜不那么复杂。 其核心是从tutorials
一步步完成configuration,创build一个celery
实例,用@celery.task
装饰你的函数,然后用my_task.delay(*args, **kwargs)
运行任务。
从你自己的评估来看,似乎你必须在缺less(关键)特性或者有一些额外的闲置之间进行select。 在我的书里,这并不难。