Вопрос

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

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

Поэтому мне было бы интересно узнать мнения по этим вопросам:

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

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

Это было полезно?

Решение

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

Другие советы

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top