Что такого крутого в Twisted? [закрыто]

83

Я все чаще слышу, что фреймворк Python Twisted и другие фреймворки бледнеют по сравнению с ним.

Может ли кто-нибудь пролить свет на это и, возможно, сравнить Twisted с другими средами сетевого программирования.

Антон Гоголев
источник
2
Кажется, что нет ничего , что даже отдаленно могло бы сравниться с Twisted, поэтому на этот вопрос немного сложно ответить. Какие альтернативы вы рассматриваете?
Sven Marnach
1
@Sven Даже не будучи разработчиком Python, мне просто любопытно, что делает Twisted таким замечательным, каким он был заявлен.
Антон Гоголев
2
@Sven Marnach: Это зависит от проблемной области, например, geventэто альтернатива Twisted для приложения "гадалка" blip.tv/file/4883016
jfs

Ответы:

133

В Twisted есть много разных аспектов, которые могут вам понравиться.

Twisted включает в себя множество реализаций протокола, а это означает, что, скорее всего, будет API, который вы можете использовать для связи с какой-либо удаленной системой (в большинстве случаев клиент или сервер) - будь то HTTP , FTP , SMTP, POP3, IMAP4 , DNS , IRC, MSN, OSCAR, XMPP / Jabber , telnet, SSH , SSL, NNTP или один из действительно малоизвестных протоколов, таких как Finger или ident, или один из протоколов построения протоколов нижнего уровня, например netstrings DJB , просто линейно-ориентированные протоколы или даже один из настраиваемых протоколов Twisted, таких как Perspective Broker (PB) илиПротокол асинхронного обмена сообщениями (AMP) .

Еще одна интересная особенность Twisted заключается в том, что поверх этих низкоуровневых реализаций протокола вы часто найдете абстракцию, которую несколько проще использовать. Например, при написании HTTP-сервера Twisted Web предоставляет абстракцию «Ресурс», которая позволяет создавать иерархии URL-адресов из объектов Python для определения того, как будут отвечать запросы.

Все это связано с взаимодействующими API-интерфейсами, в основном из-за того, что ни одна из этих функций не реализуется путем блокировки в сети, поэтому вам не нужно запускать поток для каждой операции, которую вы хотите выполнить . Это способствует масштабируемости, которую люди часто приписывают Twisted (хотя это вид масштабируемости, который включает только один компьютер, а не тот вид масштабируемости, который позволяет вашему приложению расти, чтобы использовать целый кластер хостов), потому что Twisted может обрабатывать тысячи соединения в одном потоке, что, как правило, работает лучше, чем тысячи потоков, каждый для одного соединения.

Избегание многопоточности также полезно для тестирования и отладки (и, следовательно, надежности в целом). Поскольку в типичной программе на основе Twisted упреждающее переключение контекста отсутствует, вам обычно не нужно беспокоиться о блокировке. Условия гонки, которые зависят от порядка возникновения различных сетевых событий, могут быть легко протестированы модулем путем моделирования этих сетевых событий (в то время как моделирование переключения контекста не является функцией, предоставляемой большинством (любыми?) Библиотеками потоков).

Twisted также очень заботится о качестве . Так что вы редко встретите регрессии в выпуске Twisted, и большинство API-интерфейсов просто работают, даже если вы не используете их обычным способом (потому что мы пытаемся протестировать все способы их использования, а не только обычные путь). Это особенно верно для всего кода, добавленного (или измененного) в Twisted за последние 3 или 4 года, поскольку с тех пор минимальным требованием к тестированию было 100% покрытие строк.

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

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

Жан-Поль Кальдероне
источник
1
и выглядит плохо документированным из приведенной вами ссылки об абстракции ресурсов. Но спасибо за отличный ответ, за голосование.
vinipsmaker 06
Один хороший момент - это объяснение «недокументированных ошибок сокета». Хорошее объяснение. Благодарю.
Haranadh
Я уже некоторое время использую Twisted и Django, и я подхожу к тому моменту, когда чувствую, что могу заменить Django на Twisted. Звучит странно, но мне просто нужно приложение Front-end, и я бы определил все свои протоколы на Twisted и использовал ORM для управления своей базой данных. Однако я считаю искаженным фреймворк, который не пытается ограничить вашу способность делать только одно.
Durodola Opemipo
9

Ну это наверное по вкусу.

Twisted позволяет легко создавать управляемые событиями сетевые серверы / клиенты, не беспокоясь обо всем, что для этого нужно. А благодаря лицензии MIT Twisted можно использовать практически где угодно. Но я не проводил никаких тестов, поэтому понятия не имею, как они масштабируются, но думаю, неплохо.

Еще один плюс - это Twisted Projects , с помощью которых вы можете быстро увидеть, как реализовать большинство серверов / сервисов, которые вам нужны.

У Twisted также есть отличная документация , когда я начал с ней пару недель назад, я смог быстро получить рабочий прототип.

Совершенно новый для сцены Python, пожалуйста, поправьте меня, если я ошибаюсь.

Иоганн дю Туа
источник
8
Одним из больших преимуществ использования Twisted является то, что существует целый ряд проблем с масштабируемостью, которые просто никогда не возникают из-за того, как устроен сам Twisted. Это позволяет вам продолжать открывать новые и творческие способы выстрелить себе в ногу, вместо того, чтобы сначала заново открывать для себя все обычные способы сделать это при создании сетевого приложения :)
ncoghlan
Да, будучи новичком в работе с Twisted, я быстро это обнаружил. И мне нравится, что архитектура во многом напоминает мне Netty [ jboss.org/netty ], которую я использовал достаточно широко, поэтому освоение образа мышления было очень быстрым.
Johann du Toit