2012-05-25 3 views
0

dd 명령 (http req 1)을 실행하는 파이썬 서비스 (병과 gunicorn을 사용하고 있습니다)를 호출해야합니다. 다른 호출 (http req 2)을 사용하여 언제든지 프로세스를 종료 할 수 있습니다.http 요청을 열어 두지 않고 다른 http 요청을 차단하지 않는 파이썬 하위 프로세스

A) 내가 좋아하는 뭔가를 할 경우 : HTTP I 출력을 작성하는 경우 때문에 출력을 읽는 REQ 1 개 끝 (동시 통화)

B)를 차단 될 때까지

p = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) 
out = p.stdout.read().strip() 

는 HTTP REQ 2 명 대기 http req 1은 다른 요청을 차단하지 않지만 명령이 백그라운드에서 실행되는 동안이 요청은 종료됩니다.

그래서 필요한 것은 명령이 끝날 때까지 http http 1을 유지하는 것입니다. 그러나 동시에 다른 요청으로 프로세스를 종료 할 수 있어야합니다. (I 대신 출력을 읽는) 간단한 time.sleep (X를 사용하는 경우 내가 원하는 것을 얻을 수는 REQ (1)는 살아 유지하고, 나는 동시에 REQ (2)를 호출 할 수 있습니다)

이 도와주세요

답변

1

http://docs.python.org/library/subprocess.html#subprocess.Popen.stdout + select.select([p.stdout.fileno()], [], [], timeout)을 사용해 볼 수도 있지만 가장 간단한 방법은 http://docs.python.org/library/subprocess.html#subprocess.Popen.poll을 사용하여 프로세스가 종료되었는지 확인하고 하위 프로세스가 종료 된 경우에만 출력을 읽는 것입니다.

while p.pool() is None: # supprocess alive 
    time.sleep(timeout) 
out = p.stdout.read() 
+0

완벽하게 작동합니다. 대단히 감사합니다. – Leandro

관련 문제