Comment réaliser une exécution de sous-processus non bloquante en Python ?

Linda Hamilton
Libérer: 2024-10-19 13:47:02
original
208 Les gens l'ont consulté

How to Achieve Non-Blocking Subprocess Execution in Python?

Exécution de sous-processus non bloquante

Pour obtenir une exécution de sous-processus non bloquante, envisagez d'utiliser subprocess.Popen au lieu de subprocess.call. subprocess.call attend la fin de la commande avant de revenir, tandis que subprocess.Popen démarre immédiatement le sous-processus et renvoie un objet semblable à un fichier.

<code class="python">import subprocess

subprocess.Popen(["python", "slave.py"] + sys.argv[1:])</code>
Copier après la connexion

En utilisant subprocess.Popen, vous pouvez transmettre des arguments à l'esclave. py et lui permettre de s'exécuter indépendamment de main.py. slave.py peut ensuite exécuter ses tâches sans bloquer 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>
Copier après la connexion

Dans Python 3.5 et versions ultérieures, vous pouvez également utiliser des coroutines pour obtenir le parallélisme et l'exécution non bloquante des sous-processus.

<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>
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!