Wie erreicht man eine nicht blockierende Subprozessausführung in Python?

Linda Hamilton
Freigeben: 2024-10-19 13:47:02
Original
209 Leute haben es durchsucht

How to Achieve Non-Blocking Subprocess Execution in Python?

Nicht blockierende Subprozessausführung

Um eine nicht blockierende Subprozessausführung zu erreichen, sollten Sie subprocess.Popen anstelle von subprocess.call verwenden. subprocess.call wartet auf den Abschluss des Befehls, bevor es zurückkehrt, während subprocess.Popen den Unterprozess sofort startet und ein dateiähnliches Objekt zurückgibt.

<code class="python">import subprocess

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

Mit subprocess.Popen können Sie Argumente an den Slave übergeben. py und lassen Sie es unabhängig von main.py laufen. Slave.py kann dann seine Aufgaben ausführen, ohne Main.py zu blockieren.

<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>
Nach dem Login kopieren

In Python 3.5 und höher können Sie auch Coroutinen verwenden, um Parallelität und nicht blockierende Unterprozessausführung zu erreichen.

<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>
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie erreicht man eine nicht blockierende Subprozessausführung in Python?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!