subprocess.call을 사용하여 외부 스크립트를 실행할 때 기본 프로그램이 중단되지 않도록 하려면 비차단 워크플로를 유지하는 것이 필수적입니다. 이 기사에서는 이 목표를 달성하기 위한 포괄적인 솔루션을 제시합니다.
비차단 하위 프로세스를 실행하는 기본 방법은 subprocess.call 대신 subprocess.Popen을 사용하는 것입니다. 이 대안은 기본 프로그램을 차단하지 않으므로 하위 프로세스가 독립적으로 실행되는 동안 작업을 계속할 수 있습니다. 예는 다음과 같습니다.
<code class="python">subprocess.Popen(["python", "slave.py"] + sys.argv[1:])</code>
비차단 하위 프로세스 호출에 대한 전체 데모를 보려면 다음 코드를 고려하세요.
<code class="python">import subprocess import time p = subprocess.Popen(['sleep', '5']) while p.poll() is None: print('Still sleeping') time.sleep(1) print('Not sleeping any longer. Exited with returncode %d' % p.returncode)</code>
이 코드는 비동기적으로 'sleep' 명령을 실행하고 완료될 때까지 주기적으로 상태를 확인합니다.
Python 버전 3.5 이상의 경우 보다 현대적이고 효율적인 접근 방식은 asyncio를 사용하는 것입니다. 진정한 동시성을 허용하여 여러 작업을 동시에 실행할 수 있습니다. 예는 다음과 같습니다.
<code class="python">import asyncio async def do_subprocess(): print('Subprocess sleeping') proc = await asyncio.create_subprocess_exec('sleep', '5') returncode = await proc.wait() print('Subprocess done sleeping. Return code = %d' % returncode) async def sleep_report(number): for i in range(number + 1): print('Slept for %d seconds' % i) await asyncio.sleep(1) loop = asyncio.get_event_loop() tasks = [ asyncio.ensure_future(do_subprocess()), asyncio.ensure_future(sleep_report(5)), ] loop.run_until_complete(asyncio.gather(*tasks)) loop.close()</code>
이 접근 방식을 사용하면 하위 프로세스와 기본 프로그램이 동시에 실행되어 성능과 응답성이 최대화됩니다.
위 내용은 Python에서 비차단 하위 프로세스를 실행하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!