Python-Memorandum zur parallelen / asynchronen Ausführung

Auslösen

Es gab viele ähnliche Geschichten (offizielle Übersetzung / Überarbeitung?) Über die asynchrone Ausführung von Python. Es ist schwer für einen alten Mann, der einen harten Kopf hat, also habe ich nach Beispielen gesucht und Websites in mehreren Sprachen angesehen und mich schließlich durch Versuch und Irrtum bewegt, also habe ich versucht, nur mein Herz zusammenzufassen.

Überblick

Alle Beispiele sind Muster für die Ausführung externer Befehle unter Windows Es gibt fast keinen Kommentar.

Überprüfen Sie mit PID

Einfach und nett. Das hat sich Ojisan ausgedacht.

pid.py


import subprocess
from time import sleep
procs = {}
for h in servers:
    p = subprocess.Popen(["some", "command"], ...)
    # subprocess.renne zu stdout=Es scheint mit PIPE zu funktionieren, wurde aber nicht untersucht
    procs[p.pid] = p

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

procs kann eine Liste von p vom Ende sein, Mein Favorit ist es, es am Ende mit dieser Methode zu leeren.

Parallel 1 (kein STDOUT erforderlich)

Dies ist in Ordnung, wenn das auszuführende Ziel etwas generiert. Die Ausführungsfunktion ist ein asynchrones Ausführungsziel. Als ich es zum ersten Mal gemacht habe, habe ich es mit run_until_complete aufgerufen, also habe ich mich gefragt, ob es nur mit create_subprocess_shell warten würde.

async1.py


import asyncio
from asyncoio.subprocess import DEVNULL

async def run(param):
    #Eine der beiden folgenden Arbeiten
    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)

Parallel 2 (STDOUT erforderlich)

Hier können Sie mit der auszuführenden Standardausgabe etwas unternehmen. Die Ergebnisse werden jedoch in der Reihenfolge des Endes an das Haupt-Ret zurückgegeben, sodass Sie es ertragen müssen.

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())

Bemerkungen

Ich habe das Gefühl, ich schreibe nur etwas Ähnliches. Werde ich als nächstes über openpyxl schreiben?

Recommended Posts

Python-Memorandum zur parallelen / asynchronen Ausführung
Python-Memorandum
Python-Memorandum 2
Python-Memorandum
Python Memorandum
Python Memorandum
Python-Memorandum
Python Memorandum
Python-Memorandum
Einfache parallele Ausführung mit Python-Unterprozess
Python-Grundmemorandum
Python Pathlib Memorandum
Python-Memorandum (Algorithmus)
Python-Memorandum [Links]
Parallele Taskausführung mit concurrent.futures in Python
[Python] Erstellen Sie eine asynchrone Taskausführungsumgebung + Überwachungsumgebung
Python-Memorandum-Nummerierungsvariablen
Funktionsausführungszeit (Python)
Python Memorandum (sequentielle Aktualisierung)
Paralleler Download mit Python
Python-Memorandum (persönliches Lesezeichen)
Python Basic Memorandum Teil 2
Ausführungszeit für Python ausgeben
Memorandum @ Python ODER Seminar
Python Memorandum Super Basic
Python-Grundkurs (3 Ausführung von Python)
Cisco Memorandum _ Eingabekonfiguration mit Python
Memo zur Messung der Python-Ausführungszeit
Führen Sie Python unittest parallel aus
ABC-Memorandum [ABC163 C --managementr] (Python)
Python-Anfänger-Memorandum-Funktion
Memorandum @ Python ODER Seminar: matplotlib
Memorandum über Korrelation [Python]
Messung der Ausführungszeit mit Python With
Memorandum @ Python ODER Seminar: Pandas
[Python] Memorandum über zufällige Generationen
Memorandum @ Python ODER Seminar: Scikit-Learn
ABC-Memorandum [ABC159 C - Maximales Volumen] (Python)
Python pywin32 (win32com) Excel-Memorandum
Python-Parallelverarbeitung (Multiprocessing und Joblib)
[Python] Ein Memorandum der schönen Suppe4
Python Dict Object Memorandum (mysteriöses Dokument)
Messen Sie die Ausführungszeit von Funktionen in Python
[Python] Asynchrone Anfrage mit async / await
Python (vom ersten Mal bis zur Ausführung)
PIL-Installationsmemorandum (Python Imaging Library)
Führen Sie das Python-Unittest-Modul in vs2017 aus