Является ли Twisted заменой httplib2 / socket?
-
21-08-2019 - |
Вопрос
Многие библиотеки python, даже недавно написанные, используют httplib2 или интерфейс сокета для выполнения сетевых задач.
Очевидно, что на них легче писать код, чем на Twisted, из-за их блокирующей природы, но я думаю, что это недостаток при интеграции их с другим кодом, особенно с графическим интерфейсом.Если вы хотите масштабируемости, параллелизма или интеграции с графическим интерфейсом, избегая при этом многопоточности, Twisted - естественный выбор.
Поэтому мне было бы интересно узнать мнения по этим вопросам:
- Должен ли новый сетевой код (за исключением небольших инструментов командной строки) быть написан с помощью Twisted?
- Вы бы смешали Twisted, http2lib или код сокета в одном проекте?
- Является ли Twisted pythonic для большинства библиотек (это сложнее, чем альтернативы, вводит зависимость от нестандартного пакета ...)?
Редактировать: пожалуйста, позвольте мне сформулировать это по-другому.Считаете ли вы, что написание нового библиотечного кода с помощью Twisted может стать препятствием для его внедрения?Twisted имеет очевидные преимущества (особенно переносимость и масштабируемость, как указано gimel), но тот факт, что это не базовая библиотека python, может быть рассмотрен некоторыми как недостаток.
Решение
- Должен ли новый сетевой код (за исключением небольших инструментов командной строки) быть написан с помощью Twisted?
- Может быть.Это действительно зависит.Иногда достаточно просто обернуть блокирующие вызовы в их собственный поток.Twisted хорош для крупномасштабного сетевого кода.
- Вы бы смешали Twisted, http2lib или код сокета в одном проекте?
- Конечно.Но просто помните, что Twisted является однопоточным, и что любой блокирующий вызов в Twisted заблокирует весь движок.
- Является ли Twisted pythonic для большинства библиотек (это сложнее, чем альтернативы, вводит зависимость от нестандартного пакета ...)?
- Есть много извращенных фанатиков, которые скажут, что это относится к стандартной библиотеке Python.Но многие люди могут реализовать приличный сетевой код с помощью asyncore / asynchat.
Другие советы
Видишь асинхронное-программирование-на-python-twisted, вам нужно будет решить, соответствует ли вашим потребностям зависимость от нестандартной (внешней) библиотеки.Обратите внимание на ответ с помощью @Глиф, он является основателем Twisted
проекта, и может авторитетно ответить на любой Twisted
связанный с этим вопрос.
В основе библиотек, таких как Twisted, функцией в основном цикле является не sleep, а вызов операционной системы, такой как select() или poll(), предоставляемый модулем, подобным модулю Python select.Я говорю "like" select, потому что это API, который сильно варьируется в зависимости от платформы, и почти каждый инструментарий GUI имеет свою собственную версию.Twisted в настоящее время предоставляет абстрактный интерфейс для 14 различных вариаций этой темы.Обычная вещь, которую предоставляет такой API, - это предоставление способа сказать: "Вот список событий, которых я жду.Спи, пока не случится одно из них, потом проснись и скажи мне, кто из них это был ".