Beispielcode-Zusammenfassung für die parallele / parallele Python-Verarbeitung

Ich werde Ihnen zeigen, wie Sie mit Python zwei oder mehr Prozesse gleichzeitig ausführen

--Faden

Einfädeln

Mit Threads können Sie mehrere Funktionen gleichzeitig ausführen. Es funktioniert, wenn Sie die Funktion als "Ziel" an die Klasse "threading.Thread" übergeben und mit "start ()" starten.

import time
import threading


def func1():
    while True:
        print("func1")
        time.sleep(1)


def func2():
    while True:
        print("func2")
        time.sleep(1)


if __name__ == "__main__":
    thread_1 = threading.Thread(target=func1)
    thread_2 = threading.Thread(target=func2)

    thread_1.start()
    thread_2.start()

Ausführungsergebnis

func1
func2
func2
func1
func1
func2
func2
func1

Thread-Pool (concurrent.futures)

Es ist noch leistungsfähiger, wenn Sie das Paket concurrent.futures von Python 3.2 oder höher verwenden. Verwenden Sie die ThreadPoolExecutor-Klasse.

Wenn Sie festlegen, dass die maximale Anzahl "max_workers" zuerst gleichzeitig ausgeführt werden soll, werden wieder Threads verwendet, sodass sie intelligenter sind als die oben eingeführten normalen Threads. Wenn Sie eine neuere Version von Python haben, können Sie diese aktiv verwenden.

import time
import concurrent.futures


def func1():
    while True:
        print("func1")
        time.sleep(1)


def func2():
    while True:
        print("func2")
        time.sleep(1)


if __name__ == "__main__":
    executor = concurrent.futures.ThreadPoolExecutor(max_workers=2)
    executor.submit(func1)
    executor.submit(func2)

Ausführungsergebnis

func1
func2
func1
func2
func1
func2
func1
func2

Prozesspool (concurrent.futures)

Das gleiche concurrent.futures-Paket wie oben, wird jedoch anstelle des Thread-Pools ** Prozesspool ** genannt. Es gibt auch.

Durch die Aufteilung in Prozesseinheiten anstelle von Threads unterliegen Sie nicht den Global Interpreter Lock (GIL) -Einschränkungen ** Sie können mit mehreren Kernen arbeiten. ** ** ** Da jedoch ein Prozess verwendet wird, der größer als der Thread ist, können sich andere Einschränkungen erhöhen. Hinweis!

Es ist einfach zu bedienen, ändern Sie einfach den oben eingeführten "ThreadPoolExecutor" in "ProcessPoolExecutor".

import time
import concurrent.futures


def func1():
    while True:
        print("func1")
        time.sleep(1)


def func2():
    while True:
        print("func2")
        time.sleep(1)


if __name__ == "__main__":
    executor = concurrent.futures.ProcessPoolExecutor(max_workers=2)
    executor.submit(func1)
    executor.submit(func2)

Ausführungsergebnis

func1
func2
func1
func2
func1
func2
func1
func2

Ereignisschleife (Coroutine)

Es gibt auch eine Möglichkeit, mehrere Prozesse in einem Thread auszuführen. Eine davon ist die ** Ereignisschleife **. In Python3.4 oder höher kann dies mit asyncio module realisiert werden.

Es ist leicht zu verstehen, welchen Unterschied es zu Multithreading gibt und wann es verwendet wird ... indem Sie Asynchrone Verarbeitung in Python: Asyncio Reverse Lookup-Referenz lesen. ..

Es ist viel effizienter als das Erhöhen der Anzahl von Threads für asynchrone E / A wie Kommunikation und Dateieingabe / -ausgabe, aber es ist schwierig, sich daran zu gewöhnen, da das Konzept schwierig ist.

Der Beispielcode unterscheidet sich stark vom Thread-Fall.

Wir verwenden "asyncio.sleep" anstelle von "time.sleep", um zu warten, da wir "asyncio.sleep" aufrufen und während des Wartens zu einem anderen parallelen Prozess wechseln. Es ist nur ein Collout.

import asyncio


@asyncio.coroutine
def func1():
    while True:
        print("func1")
        yield from asyncio.sleep(1)


@asyncio.coroutine
def func2():
    while True:
        print("func2")
        yield from asyncio.sleep(1)


if __name__ == "__main__":
    loop = asyncio.get_event_loop()
    tasks = asyncio.wait([func1(), func2()])
    loop.run_until_complete(tasks)

Ausführungsergebnis

func2
func1
func2
func1
func2
func1
func2
func1

Recommended Posts

Beispielcode-Zusammenfassung für die parallele / parallele Python-Verarbeitung
[Python] Beispielcode für die Python-Grammatik
Python-Zusammenfassung
Python-Parallelverarbeitung (Multiprocessing und Joblib)
Python-Zusammenfassung
Portiertes Python-Parallelberechnungsbeispiel auf F #
Python-Bildverarbeitung
Zusammenfassung des Python-Tutorials
Python-Abschlussbeispiel
Python-Zeichencode
Python-Dateiverarbeitung
[Python] Code, der Algorithmen kennt
Python-bezogene Zusammenfassung
Zusammenfassung der Python-Grundlagen
So führen Sie eine Mehrkern-Parallelverarbeitung mit Python durch
Parallele Verarbeitung ohne tiefe Bedeutung in Python
Python verteilte Verarbeitung Spartan
[Sprachverarbeitung 100 Schläge 2020] Zusammenfassung der Antwortbeispiele von Python
Zusammenfassung des Python Django-Tutorials
Dateiverarbeitung in Python
Python: Verarbeitung natürlicher Sprache
Kommunikationsverarbeitung durch Python
Multithread-Verarbeitung in Python
Spezifischer Beispielcode für die Arbeit mit SQLite3 in Python
Schreiben Sie Python2-Code in Python3 um (2to3)
Erste Python-Bildverarbeitung
Paralleler Download mit Python
Infomap Python-Zeichencode
Vor dem Schreiben von Python-Code
Zusammenfassung über Python3 + OpenCV3
Einführung in die verteilte Parallelverarbeitung von Python durch Ray
Ajax + Python + PostgreSQL-Beispiel
Zusammenfassung der Python-Funktionsargumente
Textverarbeitung mit Python
Verarbeitung in Python beenden
Beispielcode für den Einstieg in den GLSL-Shader in Processing (entweder Java oder Python)
Zusammenfassung der Python-Verzeichnisoperationen
Zusammenfassung des Python AI-Frameworks
Zusammenfassung der Python-iterativen Verarbeitung
Bildverarbeitung mit Python
Parallelverarbeitung mit Mehrfachverarbeitung
Zusammenfassung der Python-Argumente
[Memo] Zusammenfassung des Testcodes
Python Fordert den Statuscode an
Abbildung zur Verarbeitung von Python-Zeichenfolgen
Zusammenfassung der Datumsverarbeitung in Python (Datum / Uhrzeit und Datum)
Verschiedene Verarbeitung von Python
Python - Einfaches Multithread-Beispiel
[Python] 100 Schläge auf Data Science (strukturierte Datenverarbeitung) 001-010 Impressionen + Zusammenfassung der Kommentare
Führen Sie den Python-Beispielcode BNO055 mit I2C (Raspberry Pi 3B) aus.
Ich habe gerade das Originalmaterial für den Python-Beispielcode geschrieben
Beispielcode-Zusammenfassung bei der Arbeit mit Google-Tabellen von Google Colab
Senden Sie Push-Benachrichtigungen mit Python2 an iOS-Apps (mit Beispielcode).
Holen Sie sich den Ländercode mit Python
Bildverarbeitung mit Python (Teil 2)
Mit Python erstellte Beispieldaten