Пика дает лишь небольшую часть того, что делает сельдерей. Pika - это библиотека Python для взаимодействия с RabbitMQ. RabbitMQ - брокер сообщений; по своей сути, он просто отправляет сообщения в / получает сообщения из очередей. Его можно использовать как очередь задач, но также можно просто использовать для передачи сообщений между процессами без фактического распределения «работы».
Celery реализует распределенную очередь задач, при необходимости используя RabbitMQ в качестве брокера для IPC. Вместо того, чтобы просто предоставлять способ отправки сообщений между процессами, он предоставляет систему для распределения фактических задач / заданий между процессами. Вот как это описано на сайте Celery:
Очереди задач используются как механизм для распределения работы по потокам или машинам.
Входные данные очереди задач - это единица работы, называемая задачей, выделенные рабочие процессы затем постоянно контролируют очередь на предмет выполнения новой работы.
Сельдерей общается через сообщения, обычно используя брокера для посредничества между клиентами и работниками. Чтобы инициировать задачу, клиент помещает сообщение в очередь, а затем брокер доставляет сообщение работнику.
Система Celery может состоять из нескольких рабочих и брокеров, уступая место высокой доступности и горизонтальному масштабированию.
В Celery есть целый набор встроенных функций, выходящих за рамки pika. Вы можете ознакомиться с документами по сельдерею, чтобы получить представление о том, что он может делать, но вот пример:
>>> 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+1
, 2+2
, 3+3
и т. Д. На блоки по 10 и распределяет каждый блок по такому количеству рабочих Celery, сколько есть доступных. Каждый рабочий будет запускать add
на своем блоке из 10 элементов, пока вся работа не будет завершена. Затем результаты собираются с помощью вызова res.get()
. Я уверен, что вы можете представить, как это сделать с помощью pika, но я уверен, что вы также можете представить, сколько работы потребуется. Вы получаете эту функциональность прямо из коробки с помощью Celery.
Вы, безусловно, можете использовать pika для реализации распределенной очереди задач, если хотите, особенно если у вас довольно простой вариант использования. Celery просто предоставляет решение с «включенными батареями» для планирования задач, управления и т. Д., Которое вам придется реализовать вручную, если вы решите, что они вам нужны с вашим решением pika.
person
dano
schedule
20.05.2014