使用主题交换来运行多个Celery任务

使用主题交换来运行多个Celery任务,第1张

使用主题交换来运行多个Celery任务

听起来您好像希望一条消息两个队列触发/消耗,但这不是Celery的工作方式。Exchange会将任务发布到符合条件的队列中,但是一旦使用完毕,其他队列将忽略该消息。对于每个要触发的任务,您都需要一条消息。

新来的Celery用户经常会感到困惑,因为此系统中有两个“队列”用途;Queue()和文档所引用的Kombu队列,以及AMQP队列,它们直接保存消息并由工作人员使用。当我们发布到队列时,我们会想到AMQP队列,这是不正确的。(感谢回答链接在下面)。

回到您的问题,如果我理解正确的话,当user_created被消耗掉时,您希望它又产生两个任务:send_user_activate_email和check_spam。此外,它们不应该相互依赖。它们可以在单独的计算机上并行运行,而无需知道彼此的状态。

在这种情况下,您希望user_created可以“
apply_async”这两个新任务并返回。这可以直接完成,也可以使用包含check_spam和send_user_activate_email的Celery“组”来实现。该小组提供了一些不错的速记,并为您的任务提供了一些结构,因此我个人会向您介绍这个方向。

#pseudopregroup(check_spam.s(... checkspam kwargs ...), send_user_activate_email.s(... active email kwargs ...)).apply_async()

此设置将创建四个消息。每个要执行的任务一个,再加上Group()一个,它本身将产生一个结果。

对于您而言,我不确定是否需要使用Exchange或ignore_result,但是我需要查看Task代码并进一步了解系统才能做出判断。

http://docs.celeryproject.org/en/latest/userguide/canvas.html#groups


http://celery.readthedocs.org/en/v2.2.6/userguide/routing.html#exchanges-
queues-and-routing
-keys 为什么CELERY_ROUTES同时具有“队列”和“
routing_key”?

(如果我离开的话,我将删除/删除答案…)



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5664227.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存