Является ли Twisted заменой для httplib2 / socket? - PullRequest
6 голосов
/ 11 мая 2009

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

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

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

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

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

Ответы [ 2 ]

5 голосов
/ 11 мая 2009

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

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

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