gpt4 book ai didi

python - RabbitMQ:Celery 有什么 Pika 没有的?

转载 作者:IT老高 更新时间:2023-10-28 21:08:30 26 4
gpt4 key购买 nike

我一直致力于让一些分布式任务通过 RabbitMQ 工作。

我花了一些时间试图让 Celery 做我想做的事,但没能成功。

然后我尝试使用 Pika,结果一切正常,完美无缺,并且在几分钟内完成。

使用 Pika 代替 Celery 有什么遗漏的吗?

最佳答案

pika 提供的只是 Celery 所做的一小部分。 Pika 是用于与 RabbitMQ 交互的 Python 库。 RabbitMQ 是一个消息代理;在其核心,它只是向队列发送消息/从队列接收消息。它可以用作任务队列,但也可以仅用于在进程之间传递消息,而无需实际分配“工作”。

Celery 实现了一个分布式任务队列,可选择使用 RabbitMQ 作为 IPC 的代理。它不仅仅是提供一种在进程之间发送消息的方式,它还提供了一个在进程之间分配实际任务/作业的系统。以下是 Celery 网站的描述:

Task queues are used as a mechanism to distribute work across threads or machines.

A task queue’s input is a unit of work, called a task, dedicated worker processes then constantly monitor the queue for new work to perform.

Celery communicates via messages, usually using a broker to mediate between clients and workers. To initiate a task a client puts a message on the queue, the broker then delivers the message to a worker.

A Celery system can consist of multiple workers and brokers, giving way to high availability and horizontal scaling.

Celery 内置了一大堆超出 pika 范围的功能。你可以看看Celery docs了解它可以做的事情,但这里有一个例子:

>>> from proj.tasks import add

>>> res = add.chunks(zip(range(100), range(100)), 10)()
>>> res.get()
[[0, 2, 4, 6, 8, 10, 12, 14, 16, 18],
[20, 22, 24, 26, 28, 30, 32, 34, 36, 38],
[40, 42, 44, 46, 48, 50, 52, 54, 56, 58],
[60, 62, 64, 66, 68, 70, 72, 74, 76, 78],
[80, 82, 84, 86, 88, 90, 92, 94, 96, 98],
[100, 102, 104, 106, 108, 110, 112, 114, 116, 118],
[120, 122, 124, 126, 128, 130, 132, 134, 136, 138],
[140, 142, 144, 146, 148, 150, 152, 154, 156, 158],
[160, 162, 164, 166, 168, 170, 172, 174, 176, 178],
[180, 182, 184, 186, 188, 190, 192, 194, 196, 198]]

这段代码想要添加每个 x+y,其中 x 在 range(0, 100) 中,y 在 range(0,100) 中。它通过执行名为 add 的任务来完成此操作,该任务将两个数字相加,并分配添加 1+12+2 的工作, 3+3 等,分成 10 个 block ,并将每个 block 分配给尽可能多的 Celery 工作人员。每个工作人员将在其 10 个项目 block 上运行 add,直到所有工作完成。然后通过 res.get() 调用收集结果。我相信您可以想象一种使用 pika 的方法,但我相信您也可以想象需要做多少工作。您可以使用 Celery 开箱即用地获得该功能。

如果您愿意,当然可以使用 pika 来实现分布式任务队列,特别是如果您有一个相当简单的用例。 Celery 只是为任务调度、管理等提供“包含电池”的解决方案,如果您决定将它们与您的 pika 解决方案一起使用,则必须手动实现。

关于python - RabbitMQ:Celery 有什么 Pika 没有的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23766658/

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