mémorandum d'exécution parallèle / asynchrone python

Déclencheur

Il y avait beaucoup d'histoires similaires (traduction officielle / réédition?) De l'exécution asynchrone de Python. C'est difficile pour un vieil homme qui a la tête dure, alors j'ai cherché des exemples et regardé des sites dans plusieurs langues, et finalement ému par essais et erreurs, alors j'ai essayé de résumer uniquement mon cœur.

Aperçu

Tous les exemples sont des modèles d'exécution de commandes externes sous Windows Il n'y a presque pas de commentaire.

Vérifier avec PID

Facile et agréable. C'est ce qu'Ojisan a proposé.

pid.py


import subprocess
from time import sleep
procs = {}
for h in servers:
    p = subprocess.Popen(["some", "command"], ...)
    # subprocess.courir vers stdout=Cela semble fonctionner avec PIPE, mais il n'a pas été étudié
    procs[p.pid] = p

while procs:
    for pid in list(procs):
        if procs[pid].poll in not None:
            del procs[pid]
    sleep(x)

procs peut être une liste de p à partir de la fin, Mon préféré est qu'il sera vide à la fin.

Parallèle 1 (aucun STDOUT requis)

C'est OK si la cible à exécuter génère quelque chose. La fonction d'exécution est une cible d'exécution asynchrone. Quand je l'ai fait pour la première fois, je l'ai appelé avec run_until_complete, donc je me demandais s'il attendrait simplement avec create_subprocess_shell.

async1.py


import asyncio
from asyncoio.subprocess import DEVNULL

async def run(param):
    #L'une ou l'autre des deux œuvres suivantes
    p = await asyncio.create_subprocess_exec(*["some", "command", param],
           stdout=DEVNULL, ...)
    p = await asyncio.create_subprocess_shell("some command %s" % param,
           stdout=DEVNULL, ...)

    await p.wait()

if sys.platform.startswith('win'):
    loop = asyncio.ProactorEventLoop()
    asyncio.set_event_loop(loop)
else:
    loop = asyncio.get_event_loop()

funcs = asyncio.gather(*[run(p) for p in parameters])
loop.run_until_complete(funcs)

Parallèle 2 (STDOUT requis)

C'est l'endroit pour faire quelque chose en utilisant la sortie standard à exécuter. Cependant, les résultats seront renvoyés au ret principal dans l'ordre de fin, vous devez donc l'endurer.

async_stdout.py


import asyncio
from asyncoio.subprocess import PIPE
import sys

async def run(param):
    p = await asyncio.create_subprocess_shell("some command %s"  param,
            stdout=PIPE, ...)
    return await (p.communicate())[0].decode('code').splitlines()

async def main():
    funcs = asyncio.gather(*[run(p) for p in parameters]*)
    for f in asyncio.as_completed(funcs):
        ret = await f

if sys.platform.startswith('win'):
    loop = asyncio.ProactorEventLoop()
    asyncio.set_event_loop(loop)
else:
    loop = asyncio.get_event_loop()

loop.run_until_complete(main())

Remarques

J'ai l'impression d'écrire quelque chose de similaire. Vais-je écrire sur openpyxl ensuite?

Recommended Posts

mémorandum d'exécution parallèle / asynchrone python
Mémorandum Python
Mémorandum Python 2
Mémorandum Python
mémorandum python
mémorandum python
Mémorandum Python
mémorandum python
Mémorandum Python
Exécution parallèle facile avec le sous-processus python
Mémorandum de base Python
Mémorandum de Python Pathlib
Mémorandum Python (algorithme)
Mémorandum Python [liens]
Exécution de tâches parallèles à l'aide de concurrent.futures en Python
[Python] Créer un environnement d'exécution de tâches asynchrone + environnement de surveillance
Variables de numérotation des mémorandums Python
Temps d'exécution de la fonction (Python)
mémorandum python (mise à jour séquentielle)
Téléchargement parallèle avec Python
Mémorandum Python (signet personnel)
Mémorandum de base Python partie 2
Sortie du temps d'exécution de python
Mémorandum @ Python OR Séminaire
mémorandum python super basique
Cours de base Python (3 Exécution de Python)
Mémorandum Cisco _ configuration d'entrée avec Python
Mémo de mesure du temps d'exécution Python
Exécuter Python unittest en parallèle
Mémorandum ABC [ABC163 C --managementr] (Python)
fonction de mémorandum python pour débutant
Mémorandum @ Python OR Séminaire: matplotlib
Mémorandum sur la corrélation [Python]
Mesure du temps d'exécution avec Python avec
Mémorandum @ Python OU Séminaire: Pandas
[python] Mémorandum de génération aléatoire
Mémorandum @ Python OR Seminar: scikit-learn
Mémorandum ABC [ABC159 C - Volume maximum] (Python)
Mémorandum d'opération Excel Python pywin32 (win32com)
Traitement parallèle Python (multitraitement et Joblib)
[Python] Un mémorandum de belle soupe4
Mémorandum d'objet python dict (document mystérieux)
Mesurer le temps d'exécution de la fonction en Python
[Python] Requête asynchrone avec async / await
Python (de la première fois à l'exécution)
Mémorandum d'installation de PIL (Python Imaging Library)
Exécuter le module Python unittest dans vs2017