Витая или сельдерей?Что подходит для моего приложения с большим количеством вызовов SOAP? - PullRequest
29 голосов
/ 15 июня 2011

Я пишу приложение на Python, которое требует одновременности и асинхронности.У меня было несколько рекомендаций для Twisted и Celery, но у меня возникли проблемы с определением, какой вариант лучше подходит для этого приложения (у меня нет опыта работы с любым из них).

Приложение (которое не являетсявеб-приложение) в основном сосредоточено на том, чтобы делать вызовы SOAP для различных сторонних API.Чтобы обработать данный фрагмент данных, мне нужно будет последовательно вызывать несколько API.И я хотел бы иметь возможность иметь пул «работников» для каждого из этих API, чтобы я мог сделать более 1 вызова за раз для каждого API.Ничто из этого не должно быть очень интенсивным процессором.

В частности, внешний процесс добавит новое «Сообщение» в базу данных этого приложения.Мне понадобится работа, которая следит за новыми сообщениями, а затем проталкивает их в процессе.Процесс будет содержать 4-5 шагов, которые должны выполняться по порядку, но могут происходить полностью асинхронно.Каждый шаг будет принимать сообщение и действовать в соответствии с ним, как правило, добавляя детали к сообщению.Каждый последующий шаг потребует вывода из шага, который предшествует ему.Для большинства из этих шагов работа включала в себя обращение к стороннему API, обычно с SOAP-клиентом, анализ ответа и обновление сообщения.Несколько случаев будут связаны с созданием бинарного файла (сложнее выбрать, если это важно).В конечном счете, после завершения последнего шага мне нужно обновить флаг в базе данных, чтобы указать, что весь процесс для этого сообщения завершен.

Кроме того, так как каждый шаг будет включать ожидание ответа сети,Я хотел бы увеличить общую пропускную способность, выполняя несколько одновременных запросов на каждом шаге.

Является ли Celery или Twisted более подходящей средой здесь?Если они оба решат проблему адекватно, есть ли плюсы / минусы использования одного против другого?Есть ли что-то еще, что я должен рассмотреть вместо этого?

Ответы [ 2 ]

16 голосов
/ 15 июня 2011

Является ли Celery или Twisted более подходящей основой в данном случае?

Зависит от того, что вы подразумеваете под "обычно подходящими".

Если они 'Удастся ли решить проблему адекватно, есть ли плюсы / минусы в использовании одного против другого?

Не исчерпывающий список.

Плюсы Celery:

  • Готовая распределенная очередь задач с ограничением скорости, повторными попытками, удаленными работниками
  • Быстрое развитие
  • Сравнительно малая кривая обучения

Минусы сельдерея:

  • Тяжелый: несколько процессов, внешние зависимости
  • Необходимо запустить службу передачи сообщений
  • «Процессы» приложения должны соответствовать дизайну Celery

Twisted Pros:

  • Легкий: одиночный процесс и не зависит от службы передачи сообщений
  • Быстрое развитие (для тех, кто знаком с ним)
  • Гибкий
  • Вероятно быстрее, нет "внутреннего" сообщения pтребуется задница.

Скрученные минусы:

  • Крутая кривая обучения
  • Не обязательно так просто добавить мощность обработки позже.

Я знаком с обоими, и из того, что вы сказали, если бы это был я, я бы выбрал Twisted.

Я бы сказал, что вы сделаете это быстрее, используя Celery,но вы узнаете больше, используя Twisted. Если у вас есть время и желание следовать крутой кривой обучения, я бы порекомендовал вам сделать это в Twisted.

1 голос
/ 17 февраля 2017

Celery позволяет использовать асинхронное поведение различных асинхронных библиотек, таких как gevent и eventlet. Таким образом, вы можете иметь лучшее из обоих миров.

Пример использования eventlet https://github.com/celery/celery/tree/master/examples/eventlet

Пример использования gevent https://github.com/celery/celery/tree/master/examples/gevent

...