Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Mencapai Pelaksanaan Subproses Tidak Menyekat dalam Python?

Bagaimana untuk Mencapai Pelaksanaan Subproses Tidak Menyekat dalam Python?

Linda Hamilton
Linda Hamiltonasal
2024-10-19 13:47:02210semak imbas

How to Achieve Non-Blocking Subprocess Execution in Python?

Pelaksanaan Subproses Tidak Menyekat

Untuk mencapai pelaksanaan subproses tanpa menyekat, pertimbangkan untuk menggunakan subproses.Popen dan bukannya subprocess.call. subprocess.call menunggu arahan selesai sebelum kembali, manakala subprocess.Popen segera memulakan subproses dan mengembalikan objek seperti fail.

<code class="python">import subprocess

subprocess.Popen(["python", "slave.py"] + sys.argv[1:])</code>

Dengan menggunakan subprocess.Popen, anda boleh menghantar argumen kepada hamba. py dan benarkan ia berjalan secara bebas daripada main.py. slave.py kemudiannya boleh melaksanakan tugasnya tanpa menyekat 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>

Dalam Python 3.5 dan lebih baru, anda juga boleh menggunakan coroutines untuk mencapai keselarian dan pelaksanaan subproses tidak menyekat.

<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>

Atas ialah kandungan terperinci Bagaimana untuk Mencapai Pelaksanaan Subproses Tidak Menyekat dalam Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn