2009-05-11 11 views
6

Многие библиотеки python, даже недавно написанные, используют httplib2 или интерфейс сокета для выполнения сетевых задач.Закручивается замена httplib2/socket?

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

Так что я был бы заинтересован во мнениях в этих вопросах:

  1. Если новый сетевой код (за исключением небольших утилит командной строки) записывается с Twisted?
  2. Вы бы смешали Twisted, http2lib или код сокета в том же проекте?
  3. Является витой pythonic для большинства библиотек (это сложнее, чем альтернативы, ввести зависимость от нестандартного пакета ...)?

Редактировать:, пожалуйста, позвольте мне рассказать об этом по-другому. Считаете ли вы, что новый код библиотеки с Twisted может добавить барьер для его принятия? У Twisted есть очевидные преимущества (особенно переносимость и масштабируемость, как указано в gimel), но тот факт, что он не является базовой библиотекой python, может рассматриваться некоторыми как недостаток.

ответ

0
  1. Если новый сетевой код (за исключением небольших утилит командной строки) записывается с Twisted?
    • Возможно. Это действительно зависит. Иногда его просто достаточно просто обернуть блокирующие вызовы в свой поток. Twisted хорошо подходит для крупномасштабного сетевого кода.
  2. Вы бы смешали Twisted, http2lib или код сокета в том же проекте?
    • Несомненно. Но просто помните, что Twisted является однопоточным и что любой блокирующий вызов в Twisted блокирует весь движок.
  3. Является ли витой pythonic для большинства библиотек (он более сложный, чем альтернативы, представляет зависимость от нестандартного пакета ...)?
    • Есть много витых фанатиков, которые скажут, что они принадлежат стандартной библиотеке Python.Но многие люди могут реализовать достойный сетевой код с помощью asyncore/asynchat.
+8

-1. Пункт 1: скручивание отлично подходит для любого масштаба сетевого кода, ваше ограничение не применяется. Код с резьбовой оболочкой имеет худшую производительность, и его сложно отладить. Пункт 2: Нет. Если у меня есть полный скрученный стек в моем распоряжении, зачем использовать http2lib или socket? Pont 3: Асинкор/асинчат, серьезно? :( – nosklo

+3

@nosklo: Пункт 1: вы говорите о витой зилоте. Нет никаких споров о том, что скрученный сложнее. Оборот в оболочке кода легко получить право, если вы используете Queue для interthread общения, я очень сомневайтесь, что производительность будет важна для большинства приложений. Пункт 2: вы думаете о создании веб-сервера? Думаю, что нет. Пункт 3: Асинкор/Асынчат серьезно ... См. пункт 1. – Unknown

+1

Ребята, YMMV, особенно в зависимости от вашего опыта работы с инструментарий или другой. Я боюсь, что мой первоначальный вопрос был слишком субъективным. Меня не так беспокоит воспринимаемая трудность Twisted (это моя проблема, чтобы изучить ее, и я думаю, что она достаточно документирована, чтобы возможные сопровождающие этого кода не будет потеряна), чем тот факт, что он может ограничить его приемлемость для других кодеров. – oparisy

5

См. asychronous-programming-in-python-twisted, вам нужно будет решить, зависит ли оно от нестандартной (внешней) библиотеки от ваших потребностей. Обратите внимание на ответ @Glyph, он является основателем проекта Twisted и может ответить на любой вопрос, связанный с Twisted.

В основе таких библиотек, как Twisted, функция в основном цикле не спящий режим, а вызов операционной системы, такой как select() или poll(), как открытый модулем, например, модулем выбора Python. Я говорю «like» select, потому что это API, который сильно варьируется между платформами, и почти у каждого инструментария GUI есть своя версия. В настоящее время Twisted предоставляет абстрактный интерфейс для 14 различных вариантов этой темы. Обычная вещь, которую предоставляет такой API, - это способ сказать: «Вот список событий, которые я жду. Идите спать, пока не произойдет одно из них, затем проснитесь и скажите мне, какой из них он был. "

+0

Ваш ответ подробно описан, но я уже знаю (некоторые из них). Меня интересует, как другие разработчики могут это воспринять, и если некоторые из них захотят не использовать мою библиотеку, потому что она зависит от неосновной библиотеки. Вы знаете, точно так же, как некоторые из них не будут интегрировать код GPL в свой источник по причинам совместимости лицензии. – oparisy

+1

Дополнительные зависимости всегда следует учитывать с осторожностью. Я, мой ограниченный опыт, Twisted немного отстает от версий Python, но достаточно прочен. – gimel