비 차단 subprocess.call: 병렬 스크립트 실행 달성
Python 프로그램에서 asubprocess.call()을 실행할 때 일반적으로 호출자는 계속 진행하기 전에 하위 프로세스가 완료될 때까지 기다립니다. 그러나 특정 애플리케이션의 경우 하위 프로세스가 동시에 실행되는 동안 호출자가 계속 실행할 수 있도록 하위 프로세스를 비차단으로 만드는 것이 바람직할 수 있습니다.
문제 시나리오
다음 시나리오를 고려하십시오. "main.py" 프로그램에서 non-blockingsubprocess.call()로 "slave.py" 스크립트를 시작하려고 합니다. "main.py"에서 "slave.py"가 처음 시작될 때 인수를 한 번 전달해야 하지만 그 이후에는 스크립트 간에 추가 통신이 필요하지 않습니다.
해결책: subprocess.Popen
"slave.py"의 비차단 실행을 달성하려면 "main.py"에서 "subprocess.call()"을 "subprocess.Popen()으로 바꾸세요. 하위 프로세스를 기다리는 대신 완료하려면 "subprocess.Popen()"이 즉시 반환되어 "main.py"가 작업을 계속할 수 있습니다.
코드 예
<code class="python">import subprocess import sys subprocess.Popen(["python", "slave.py"] + sys.argv[1:])</code>
대안: asyncio
최신 버전의 Python(3.5 이상)에서는 "asyncio" 모듈을 활용하여 비차단 하위 프로세스 호출을 구현할 수 있습니다. 이 접근 방식은 코루틴과의 동시성을 활용하여 여러 작업을 실행할 수 있습니다. 동시에.
코드 예제(asyncio)
<code class="python">import asyncio async def do_subprocess(): proc = await asyncio.create_subprocess_exec('sleep', '5') returncode = await proc.wait() print(f'Subprocess done sleeping. Return code = {returncode}') loop = asyncio.get_event_loop() loop.run_until_complete(asyncio.gather(do_subprocess())) loop.close()</code>
추가 참고사항
위 내용은 Python에서 Subprocess.call의 비차단 실행을 달성하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!