Подтвердить что ты не робот

Витой или сельдерей? Что подходит для моего приложения с большим количеством вызовов SOAP?

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

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

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

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

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

4b9b3361

Ответ 1

Является ли сельдерей или скрученный более подходящим каркасом здесь?

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

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

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

Сельдерей Плюсы:

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

Celery Cons:

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

Скрученные профи:

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

Twisted Cons:

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

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

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

Ответ 2

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

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

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