[Python] Über Executor und zukünftige Klassen

Über diesen Artikel

Concurrent.futures, das aus Python Version 3.2 hinzugefügt wurde, wird als Memorandum zusammengefasst.

Das Modul "concurrent.futures" bietet abschließend sowohl Multithread- als auch Multiprozess-Schnittstellen.

In welcher Situation wird es verwendet?

F. Was tun, wenn das parallele Problem nicht zur asynchronen Anwendung passt oder Sie nicht wissen, was zu tun ist?

A. Delegieren Sie die Verarbeitung des problematischen Teils an einen Thread oder Prozess. Dadurch wird die delegierte Verarbeitung wie ein Collout angezeigt, die Steuerung für die Ereignisschleife freigegeben und das Endergebnis verarbeitet.

Das Modul "concurrent.future" ist darauf vorbereitet, dieses A zu realisieren.

Was kann ich tun?

Das Modul "concurrent.future" ist ebenfalls in das Modul "asycio" integriert. Durch die Kombination dieser beiden Module können Sie Blockierungsfunktionen verwenden, die in mehreren Threads oder Prozessen ausgeführt werden, z. B. ein asynchrones, nicht blockierendes Collout.

Wie benutzt man es?

Das Modul "concurrent.future" verfügt über ein "Executor" -Objekt und ein "Future" -Objekt.

Über die Executor Klasse

Executor repräsentiert einen ** Pool ** von Ressourcen, die Arbeitselemente parallel verarbeiten können. Es scheint einen ähnlichen Zweck zu haben wie die "Pool" -Klasse des "Multiprocessing" -Moduls, jedoch mit einem anderen Design als die Schnittstelle.

** Die Executor-Klasse ist eine nicht instanziierte Basisklasse **. Die Executor-Klasse hat die folgenden zwei Unterklassen.

Aufgrund dieser Tatsachen kann gesagt werden, dass die Klasse "Executor" sowohl Multithread- als auch Multiprozessschnittstellen bereitstellt.

Diese Klassen bieten drei Methoden.

Unten finden Sie ein Implementierungsbeispiel.

geocoding_by_concurrentfutures.py


from gmaps import Geocoding
from concurrent.futures import ThreadPoolExecutor

api = Geocoding(api_key='maruhi')

PLACES = (
    'Reykjavik', 'Vien', 'Zadar',
    'Venice', 'Wrocow', 'Bolognia',
    'Berlin', 'Dehil', 'New York',
    'Osaka'
)

POOL_SIZE = 4


def fetch_place(place):
    return api.geocode(place)[0]


def present_result(geocoded):
    print("{:s}, {:6.2f}, {:6.2f}".format(
        geocoded['formatted_address'],
        geocoded['geometry']['location']['lat'],
        geocoded['geometry']['location']['lng'],
    ))


def main():

    with ThreadPoolExecutor(POOL_SIZE) as executor:
        results = executor.map(fetch_place, PLACES)
        print(type(results))
        print(results)
    for result in results:
        present_result(result)


if __name__ == "__main__":
    main()
$python geocoding_by_concurrentfutures.py

<class 'generator'>
<generator object _chain_from_iterable_of_lists at 0x000001E2A3CED9C8>
Reykjavík, Iceland,  64.15, -21.94
3110 Glendale Blvd, Los Angeles, CA 90039, USA,  34.12, -118.26
Zadar, Croatia,  44.12,  15.23
Venice, Metropolitan City of Venice, Italy,  45.44,  12.32
Wrocław, Poland,  51.11,  17.04
Bologna, Metropolitan City of Bologna, Italy,  44.49,  11.34
Berlin, Germany,  52.52,  13.40
Delhi, India,  28.70,  77.10
New York, NY, USA,  40.71, -74.01
Osaka, Japan,  34.69, 135.50

Über die Future Klasse

Die Klasse "Future" wird von der Funktion "Executor.submit ()" generiert. Das "Future" -Objekt verwaltet die asynchrone Ausführung aufrufbarer Objekte und zeigt die Verarbeitungsergebnisse an. Der Rückgabewert des registrierten aufrufbaren Objekts wird mit der Methode "Future.result ()" ermittelt. ** Wenn nicht fertig, blockieren Sie, bis das Ergebnis fertig ist. ** Die Ergebniserfassung mit der Methode result () muss nicht nach dem Ende des Prozesses erfolgen, undresult ()wartet auf das Ende und gibt den Wert zurück.

[Über (offizielle) zukünftige Objekte] https://docs.python.org/ja/3/library/concurrent.futures.html#future-objects

sample_concurrent_futures.py


from concurrent.futures import ThreadPoolExecutor

def loudy_return():

    print("processing")
    return 42

with ThreadPoolExecutor(1) as executor:

    future = executor.submit(loudy_return)

print(future)
print(future.result())


$python sample_concurrent_futures.py
processing
<Future at 0x27f17bd76c8 state=finished returned int>
42

Verweise

Recommended Posts

[Python] Über Executor und zukünftige Klassen
Informationen zu Python-Objekten und -Klassen
Apropos alte und neue Klassen in Python
Informationen zu Python-Variablen und -Objekten
Über Python, len () und randint ()
Informationen zu Python-Datums- und Zeitzone
Über Python und reguläre Ausdrücke
Informationen zu Python- und Betriebssystemoperationen
Python # Über Referenz und Kopie
Über Python sort () und reverse ()
Informationen zur Installation der Serien Pwntools und Python2
ABC für Python-Abstract-Klassen und Ententypisierung
Python: Ein Hinweis zu Klasse 1 "Abstract"
Über Python und Cython dtype
Was war überraschend an Python-Klassen?
Über Python Pickle (cPickle) und Marschall
Über Python, aus und importieren, als
Python-Klassen und -Instanzen, Instanzmethoden
Über _ und __
Binden Sie Methoden an Python-Klassen und -Instanzen
Eine Geschichte über Python Pop und Append
Apropos Python-Klassenattribute und Metaklassen
Über Python-Slices
Über die Einschlussnotation von Python
Über Python tqdm.
Über die Python-Ausbeute
Über Python, Klasse
Informationen zur Python-Vererbung
Über Python, range ()
Über Python Decorator
Informationen zur Python-Referenz
Über Python-Dekorateure
[Python] Über Multi-Prozess
[Einführung in Python3 Tag 12] Kapitel 6 Objekte und Klassen (6.3-6.15)
Wie Python-Klassen und magische Methoden funktionieren.
Denken Sie an Suchvorgänge mit Tiefenpriorität und Breitenpriorität in Python
Über den Unterschied zwischen "==" und "is" in Python
[Einführung in Python3 Tag 11] Kapitel 6 Objekte und Klassen (6.1-6.2)
[Hikari-Python] Kapitel 09-02 Klassen (Erstellen und Instanziieren von Klassen)
Eine Geschichte über das Ändern von Python und das Hinzufügen von Funktionen
[Python] Erfahren Sie mehr über asynchrone Programmierung und Ereignisschleifen
Über flache und tiefe Kopien von Python / Ruby
[Python] Komprimieren und dekomprimieren
Über Python für Schleife
Erste Schritte mit Python3 # 2 Erfahren Sie mehr über Typen und Variablen
Über Klasse und Instanz
Über Funktionsargumente (Python)
Python- und Numpy-Tipps
Das einfachste Python-Memo in Japan (Klassen und Objekte)
[Python] Pip und Wheel
Python-Pakete und -Module
Vue-Cli- und Python-Integration
[Python] Memo über Funktionen
Python-Klassen sind langsam
Ruby, Python und Map
Zusammenfassung über Python3 + OpenCV3
Über Cumprod und Cummax
Über Python für ~ (Bereich)