Масштабируемый чат-сервер Python - PullRequest
9 голосов
/ 21 октября 2011

Я только начал изучать сокеты на Python.Итак, я написал несколько примеров серверов и клиентов чата.Большая часть того, что я видел в Интернете, похоже, использует модуль потоков для (асинхронной) обработки клиентских подключений к серверу.Я понимаю, что для масштабируемого сервера вам нужно использовать некоторые дополнительные приемы, потому что тысячи потоков могут убить сервер (поправьте меня, если я ошибаюсь, но это из-за GIL?), Но на данный момент это не моя проблема.

Странно, что где-то в документации по Python я обнаружил, что создание подпроцессов - это правильный путь (к сожалению, я потерял ссылку, извините :() для обработки сокетов.

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

Пожалуйста, дайте мне ответ и объясните мне разницу.

Кстати: Я знаю, что есть такие вещи, как Twisted, которые хорошо написаны. Я не ищу готовый масштабируемый сервер, я вместо этого пытаюсь понять, как написать тот, который может быть масштабирован или будет иметь дело по крайней мере с 10 КБклиенты.

РЕДАКТИРОВАТЬ: Операционная система Linux.

Ответы [ 2 ]

11 голосов
/ 21 октября 2011

Facebook требовался масштабируемый сервер, поэтому они написали Tornado (который использует асинхронный режим). Twisted также отлично масштабируется (он также использует асинхронный режим). Gunicorn также является лучшим исполнителем (он использует несколько процессов). Ни один из быстрых, масштабируемых инструментов, о которых я знаю, не использует многопоточность.

Простой способ поэкспериментировать с различными подходами - начать с модуля SocketServer в стандартной библиотеке: http://docs.python.org/library/socketserver.html. Это позволяет вам легко переключать подходы, поочередно наследуя либо ThreadingMixin, либо ForkingMixin.

Кроме того, если вам интересно узнать об асинхронном подходе, самый простой способ построить ваше понимание - прочитать сообщение в блоге, в котором обсуждается реализация Tornado: http://golubenco.org/2009/09/19/understanding-the-code-inside-tornado-the-asynchronous-web-server-powering-friendfeed/

Удачи и счастливых вычислений: -)

0 голосов
/ 26 сентября 2012

тысячи потоков могут убить сервер (поправьте меня, если я ошибаюсь, но связано ли это с GIL?)

С одной стороны, GIL не имеет никакого отношения к нет. нитей. Если вы выполняете ввод-вывод в этих потоках, у вас могут быть сотни тысяч этих потоков без каких-либо проблем с GIL или иным образом.

GIL вступает в игру, когда у вас есть задачи с интенсивным использованием процессора.

Посмотрите этот очень информативный доклад Дэвида Бизли , чтобы узнать больше о GIL.

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