Предложения по разработке многопоточного административного интерфейса на основе TCP - PullRequest
1 голос
/ 14 ноября 2010

Я создал очень простой TCP-сервер (на python), который при запросе возвращает различную статистику системного уровня хост-ОС, на которой запущен указанный скрипт.

В рамках моих экспериментов и цели получить знания о Python и его доступных библиотеках;я хотел бы построить на административном интерфейсе, который а) привязывается к отдельному сокету TCP; б) принимает удаленные соединения из локальной сети; в) позволяет подключенному пользователю выполнять различные команды.Приложение Varnish является примером инструмента, который предлагает аналогичные административные функции.

Мои знания о потоках ограничены, и я ищу указатели на то, как выполнить что-то похожее на следующее:

пользователь подключается к порту администратора (telnet remote.host 12111) и выдает «SET LOGGING DEBUG», или «STOP SERVICE».

Моя путаница связана с тем, как бы я пошел об обмене даннымимежду нитями.Если служба запущена, например, в потоке-1, как я могу получить доступ к данным из этого потока?

В качестве альтернативы, список приложений Python, предлагающих такую ​​функцию, был бы очень полезен.Я бы с удовольствием прошился по коду, чтобы снова использовать их идеи.

Ответы [ 3 ]

1 голос
/ 14 ноября 2010

Python включает несколько многопоточных серверов (SocketServer, BaseHTTPServer, xmlrpclib). Возможно, вы захотите взглянуть и на Twisted, это мощная среда для работы в сети.

0 голосов
/ 15 ноября 2010

Лучше всего использовать многопроцессорную библиотеку , она предоставляет полный набор функций для параллельных вычислений (Queues, Pipes, ...). Многопоточность в python неэффективна из-за ограничений, которые поставляются с GIL .

мультипроцессинг - это пакет, который поддерживает процессы порождения с использованием API, аналогичного модулю потоков. Многопроцессорный пакет предлагает как локальный, так и удаленный параллелизм, эффективно обходя блокировку глобального интерпретатора, используя подпроцессы вместо потоков. Благодаря этому многопроцессорный модуль позволяет программисту полностью использовать несколько процессоров на данном компьютере. Он работает как в Unix, так и в Windows.

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

0 голосов
/ 14 ноября 2010

Вероятно, самой простой отправной точкой будет использование xmlrpclib в Python.

Что касается потоков, все потоки могут читать все данные в программе Python; только один поток за раз может изменить любой данный объект, поэтому примитивы, такие как списки и запросы, всегда будут в согласованном состоянии. Структуры данных (то есть объекты классов), включающие в себя несколько примитивов, потребуют немного большего внимания. Самый безопасный способ координации между потоками - это передача сообщений / команд между потоками через что-то вроде Queue.Queue; это не всегда самый эффективный способ, но он гораздо менее подвержен проблемам.

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