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