首頁 > 後端開發 > Python教學 > 如何在Python中實現非阻塞子程序執行?

如何在Python中實現非阻塞子程序執行?

Linda Hamilton
發布: 2024-10-19 13:47:02
原創
288 人瀏覽過

How to Achieve Non-Blocking Subprocess Execution in Python?

非阻塞子程序執行

要實現非阻塞子程序執行,請考慮使用 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中文網其他相關文章!

來源:php
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板