Subprocess.call Tanpa Menyekat: Mencapai Pelaksanaan Skrip Selari
Apabila melaksanakan asubprocess.call() dalam program Python, pemanggil biasanya menunggu sehingga subproses selesai sebelum meneruskan. Walau bagaimanapun, untuk aplikasi tertentu, adalah wajar untuk menjadikan subproses tidak disekat, membenarkan pemanggil meneruskan pelaksanaan semasa subproses berjalan serentak.
Senario Masalah
Pertimbangkan senario berikut: anda ingin memulakan skrip "slave.py" sebagai non-blockingsubprocess.call() daripada program "main.py" anda. Anda perlu menghantar hujah daripada "main.py" kepada "slave.py" sekali apabila yang terakhir dimulakan tetapi tidak memerlukan komunikasi lanjut antara skrip selepas itu.
Penyelesaian: subprocess.Popen
Untuk mencapai pelaksanaan tidak menyekat "slave.py," gantikan "subprocess.call()" dengan "subprocess.Popen() dalam "main.py." Daripada menunggu subprocess untuk melengkapkan, "subprocess.Popen()" kembali serta-merta, membenarkan "main.py" meneruskan operasinya.
Contoh Kod
<code class="python">import subprocess import sys subprocess.Popen(["python", "slave.py"] + sys.argv[1:])</code>
Alternatif: asyncio
Untuk versi Python yang lebih terbaharu (3.5 atau lebih baru), anda boleh menggunakan modul "asyncio" untuk melaksanakan panggilan subproses tidak menyekat Pendekatan ini memanfaatkan bersamaan dengan coroutine untuk melaksanakan berbilang tugas serentak.
Contoh Kod (asyncio)
<code class="python">import asyncio async def do_subprocess(): proc = await asyncio.create_subprocess_exec('sleep', '5') returncode = await proc.wait() print(f'Subprocess done sleeping. Return code = {returncode}') loop = asyncio.get_event_loop() loop.run_until_complete(asyncio.gather(do_subprocess())) loop.close()</code>
Nota Tambahan
Atas ialah kandungan terperinci Bagaimana untuk Mencapai Pelaksanaan Tanpa Menyekat Subprocess.call dalam Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!