Python сокеты, как лучше всего обрабатывать несколько соединений одновременно? - PullRequest
1 голос
/ 28 октября 2010

Какой лучший способ обрабатывать множество соединений одновременно в python?Первый способ, о котором я думаю, - это многопоточность, которая работает, но при 10 МБ ОЗУ на каждый поток это довольно дорого.

Итак, какие существуют другие способы обработки большого количества соединений одновременно?

ЕдинственноеПроблема, которую я вижу без использования потоков, состоит в том, что использование socket.recv () ожидает данных от этого клиентского протокола, поэтому один поток, обрабатывающий несколько клиентов, не будет работать.

Но вот почему я задаю этот вопрос, чтолучший способ обработать несколько соединений?

Спасибо!

1 Ответ

5 голосов
/ 28 октября 2010

Хорошей альтернативой потокам, если у вас действительно большое количество одновременных подключений, является асинхронный / основанный на событиях подход с обратными вызовами.

Python уже имеет очень зрелую и мощную библиотеку / инфраструктуру для этой цели- Витая .Существует также более простое решение, использующее модуль стандартной библиотеки asyncore.Из его документов:

Этот модуль предоставляет базовую инфраструктуру для записи клиентов и серверов асинхронных служб сокетов.

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

Обычно асинхронные сокет-серверы в последнее время становятся очень актуальной темой (в качестве свидетеля используется node.js, я уверен, что вы можете найти много интересногоматериал онлайн.

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