2012-03-01 2 views
2

나는 기본적으로 클라이언트로부터 들어오는 연결을 받아들이는 파이썬으로 작성된 서버를 가지고 있으며, 클라이언트로부터 수신 된 데이터를 서브 프로세스 (연결 당 하나의 인스턴스)로 보내고 그 결과 데이터를 처리 한 다음 그 결과를 서버에서 클라이언트로 다시 보낼 수 있습니다.파이썬 하위 프로세스 : 스트리밍 인/아웃

문제는 데이터가 스트리밍 중이므로 EOF가없는 상태에서 여러 읽기/쓰기 작업을 실행할 수 있어야한다는 것입니다. 지금까지는 서버 프로그램을 읽지 못하게하지 않고도 그렇게 할 수있는 해결책을 찾지 못했습니다. 어떤 제안? 감사.

답변

2

select.select (Unix 및 Windows에서 사용 가능)을 사용할 수 있습니다. client 소켓이나 proc.stdout 중 하나가 읽을 준비가 될 때까지

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

select.select에 대한 호출은 차단합니다.

rlist에는 읽을 준비가 된 [client.stdin, proc.stdout]의 하위 집합이 있습니다.

다른 사용법이 있지만 사용 예는 here입니다.

0

UDP 서버와 클라이언트를 구축해야하는 것처럼 들립니다.

관련 문제