Будет ли Twisted хорошим выбором для построения многопоточного сервера? - PullRequest
6 голосов
/ 02 сентября 2010

Мне нужно извлечь из сотен учетных записей электронной почты pop3, и я хочу создать надежный сервер для этого.

Будет ли Twisted хорошим выбором для этого типа проекта?

Прямо сейчас простым прототипом было бы извлечь из одной учетной записи pop3, а затем извлечь из многих, но это был бы сериализованный процесс.

Я хочу создать сервер с несколькими потоками, чтобы он мог делать вещив то же время.

Ответы [ 4 ]

7 голосов
/ 02 сентября 2010

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

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

Неблокирующая модель

+--------------------------+
|task1 | wait period | comp|
+--------------------------+
       +--------------------------+
       |task2 | wait period | comp|
       +--------------------------+

Вы можете разработать очень надежный сервер с Twisted, который поддерживает POP3 / IMAP.

Существует пример того, как собрать pop3-клиент с витой .

2 голосов
/ 02 сентября 2010

Учитывая, что большая часть вашей активности POP3 будет сетевым вводом-выводом, именно здесь Twisted превосходит. Вы на самом деле не столько занимаетесь потоками, сколько выполняете асинхронные операции с сокетами на основе событий, что является венцом Twisted.

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

0 голосов
/ 02 сентября 2010

Слово предостережения с витой, хотя скрученная очень надежна, я обнаружил, что вращение сотен потоков с использованием примеров кода, доступных в документации, - это рецепт условий гонки и тупиков. Мое предложение - попробовать скрутить, но модуль многопоточности stdlib ждет своего часа, если скручивание станет неуправляемым. У меня был хороший успех с моделью потребительского производителя, использующей вышеупомянутую библиотеку.

0 голосов
/ 02 сентября 2010

Это хороший выбор для сервера, но по вашему описанию вы ищете многопоточный POP-клиент.

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

...