gpt4 book ai didi

python - celery 和自定义消费者

转载 作者:太空狗 更新时间:2023-10-29 22:26:56 25 4
gpt4 key购买 nike

据我所知,Celery 既充当消息的生产者又充当消息的消费者。这不是我想要实现的。我希望 Celery 仅充当消费者,根据我发送到我选择的 AMQP 代理的消息触发某些任务。这可能吗?

或者我需要通过在我的堆栈中加入胡萝卜来做汤吗?

最佳答案

Celery 代理充当消息存储并将它们发布给订阅这些消息的一个或多个工作人员,

因此:celery 将消息推送给代理(rabbitmq、redist、celery 本身通过 django db 等)。这些消息由工作人员按照代理的协议(protocol)检索,并记住它们(通常它们是持久的,但也许这取决于你的经纪人),并被你的 worker 处决。

任务结果在正在执行的工作任务上可用,您可以配置在哪里 store those results你可以用 this method 检索它们.

您可以使用 celery 将参数传递给您的“接收函数”(您定义的任务,文档中有一些 examples ,通常您不想在这里传递大的东西(比如查询集),但只传递允许您在执行任务时检索所需内容的最少信息。

一个简单的例子可能是:

你注册一个任务

@task
def add(x,x):
return x+y

然后您从另一个模块调用:

from mytasks import add

metadata1 = 1
metadata2 = 2
myasyncresult = add.delay(1,2)
myasyncresult.get() == 3

编辑

在你编辑之后,我看到你可能想从 celery 以外的其他来源构建消息,你可以看到 here消息格式,它们默认为符合该格式的 pickled 对象,因此您将这些消息发布到 rabbitmq 代理的正确队列中,然后您就可以从您的 worker 中检索它们。

关于python - celery 和自定义消费者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17486397/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com