非阻塞子程序執行
要實現非阻塞子程序執行,請考慮使用 subprocess.Popen 而不是 subprocess.call。 subprocess.call 等待指令完成後再返回,而 subprocess.Popen 立即啟動子程序並傳回一個類似檔案的物件。
<code class="python">import subprocess subprocess.Popen(["python", "slave.py"] + sys.argv[1:])</code>
透過使用 subprocess.Popen,您可以將參數傳遞給 Slave。 py 並允許它獨立於 main.py 運行。然後,slave.py 可以在不阻塞 main.py 的情況下執行其任務。
<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>
在 Python 3.5 及更高版本中,您也可以使用協程來實現並行性和非阻塞子程序執行。
<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中文網其他相關文章!