Bagaimana untuk Mencapai Pelaksanaan Subproses Tidak Menyekat dalam Python?

Linda Hamilton
Lepaskan: 2024-10-19 13:47:02
asal
209 orang telah melayarinya

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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!

sumber:php
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!