Python의 하위 프로세스 출력 스트림에 대한 비차단 읽기
Python에서 하위 프로세스 모듈은 외부 프로세스를 시작하고 상호 작용하는 편리한 방법을 제공합니다. 프로세스. 그러나 상위 프로세스와 하위 프로세스 간의 I/O 상호 작용을 효율적으로 처리하는 것이 중요합니다.
다음 시나리오를 고려하십시오. 하위 프로세스의 표준 출력 스트림에서 비차단 읽기를 수행하려고 합니다. 기본적으로 p.stdout.readline()은 버퍼에서 데이터를 사용할 수 있을 때까지 차단됩니다. 이 문제를 해결하기 위해 별도의 스레드와 대기열을 포함하는 기술을 사용할 수 있습니다.
먼저 출력 라인을 저장할 대기열을 만듭니다.
from Queue import Queue
다음으로 읽는 스레드를 시작합니다. 하위 프로세스 stdout의 행을 대기열에 추가합니다.
def enqueue_output(out, queue): for line in iter(out.readline, b''): queue.put(line) out.close()
하위 프로세스를 초기화하고 스레드:
p = Popen(['myprogram.exe'], stdout=PIPE) q = Queue() t = Thread(target=enqueue_output, args=(p.stdout, q)) t.daemon = True t.start()
한 줄을 비차단적으로 읽으려면 다음을 사용하세요.
try: line = q.get_nowait() # or q.get(timeout=.1) except Empty: print('no output yet') else: # got line # do something with the line
이 방법은 크로스 플랫폼과 호환되며 비차단 읽기를 보장하므로 효율적으로 작업할 수 있습니다. 하위 프로세스의 데이터를 처리합니다.
위 내용은 Python의 하위 프로세스 출력 스트림에서 비차단 읽기를 어떻게 수행할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!