Do not switch Python to Node.JS
Ребята из CloudKick рассказывают о том как заменили Python на NodeJS.
Нет, я согласен, Twisted на первый взгляд может быть непростым, но Node.JS это однозначно не лучший вариант.
В наших проектах мы сделали несколько сервисов на Node.JS. Используя async.js можно заметно упростить код, но несмотря на это, с ростом сложности кода, очень быстро растёт уровень вложенности вызовов async.js, и спустя какое-то время, опять, разобраться в этой мешанине становится невозможно.
То ли дело Python. Устав бороться с многоуровневыми вызовами коллбеков, мы за несколько дней переписали код на Python с использованием greenlet'ов из gevent.
Кто не в курсе -- гринлет это fancy-name для сопрограмм -- асинхронно выполняющихся блоков кода использующих кооперативную многозадачность. При использовании гринлетов программа по прежнему выполняется в один поток, и этот поток выполняет одновременно выполняет только один гринлет. При вызове любой блокирующей операции (например чтения, или записи в сокет), текущий гринлет останавливается и управление передаётся в другой, который готов продолжить выполнение. Выполнение предыдущего продолжится после того как операция которую он ждал будет завершена.
Таким образом gevent позволяет писать обычный Python код, который при этом будет выполняться асинхронно. Это гораздо проще и намного выразительней чем месиво из callback'ов в NodeJS.
Я глубоко убеждён что ребята из Cloudkick, имея к тому же обширную базу код на Python, сделали неправильный выбор. Не повторяйте их ошибки, выбирайте Python.