Подпроцесс Python: потоковый вход и выход - PullRequest
2 голосов
/ 01 марта 2012

У меня есть сервер, написанный на Python, который в основном принимает входящее соединение от клиентов и передает полученные от них данные в подпроцесс (один экземпляр на соединение), который затем обрабатывает данные и возвращает результат на сервер, чтобы он мог отправитьэто обратно клиенту.

Проблема в том, что данные передаются в потоковом режиме, и мне нужно иметь возможность выполнять несколько операций чтения / записи без EOF.До сих пор я не смог придумать решение, которое позволило бы мне сделать это без блокировки моей серверной программы при чтении.Какие-либо предложения?Спасибо.

Ответы [ 2 ]

2 голосов
/ 01 марта 2012

Вы можете использовать select.select (доступно в Unix и Windows).

while True:
    rlist, wlist, xlist = select.select([client, proc.stdout], [], [])

Вызов select.select будет блокироваться до тех пор, пока сокет client или proc.stdout не будут готовы к чтению.

rlist содержит подмножество [client.stdin, proc.stdout], которое готово к чтению.

Пример его использования (хотя и для другой проблемы) можно найти здесь .

0 голосов
/ 01 марта 2012

Похоже, вам нужно установить UDP-сервер и клиента.

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