2017-02-03 2 views
-2

Привет, У меня есть сервер/клиентская модель с использованием модуля SocketServer. Задача сервера - получить тестовое имя от клиентов и запустить тест. тест запускается с использованием модуля подпроцесса. Я хотел бы, чтобы сервер продолжал отвечать на запросы клиентов и любые новые задания, которые нужно укладывать в список или очередь, и запускать один за другим, единственное ограничение, которое у меня есть, - это не запускать тест на сервере, если только его выполнение не выполняется.Python. Threading

Благодаря

+1

На ваш вопрос? – ForceBru

+0

Пожалуйста, разместите свои предложения по работе в разделе «Вакансии» SO. –

+0

Пройдите [Tour] (// stackoverflow.com/tour) и прочитайте документацию в [Справочном центре] (// stackoverflow.com/help). В частности, вы должны прочитать о [как задать хороший вопрос] (// stackoverflow.com/help/how-to-ask) и какие вопросы заданы [по теме] (// stackoverflow.com/help/on -topic) здесь, в SO. –

ответ

0

Вы можете использовать модуль

multiprocessing
для запуска новых процессов. На стороне сервера у вас будет переменная, которая ссылается на текущий текущий процесс. Вы все еще можете запускать и принимать запросы SocketServer и сохранять их в списке. Каждую секунду (или все, что вы хотите), в другом потоке, вы должны проверить, мертв ли ​​текущий процесс или нет, вызвав isAlive(). Если он мертв, просто просто запустите следующий тест в списке.

Другой способ сделать это (лучше), это то, что в третьем потоке (тот, который проверяет) вы вызываете .join() из процесса, чтобы он вызывал только следующую строку кода после текущего процесса мертв. Таким образом, вам не нужно постоянно проверять каждую секунду или что-то еще, и это более эффективно.

0

Что вы можете сделать, это:

  1. Получить тест имя в сокет сервера, поместите его в Queue
  2. В отдельном потоке, прочитать имена тестов из очереди по одному
  3. Выполните процесс и дождитесь его завершения с помощью communicate()
  4. Продолжайте опрос Очередь для новых тестов, повторите шаги 2, 3, если доступны тестовые имена
  5. Между тем сервер продолжает получать и ввод тестовых имен в очередь