2010-11-14 5 views
1

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

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

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

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

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

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

ответ

0

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

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

1

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

0

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

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^