Mit Python Mul­tipro­ces­sing können Sie die Ar­beits­last auf mehrere Prozesse aufteilen, um die Ge­samt­aus­füh­rungs­zeit zu verkürzen. Das ist besonders vor­teil­haft bei um­fang­rei­chen Be­rech­nun­gen oder großen Da­ten­men­gen.

Was ist Python Mul­tipro­ces­sing?

Mul­tipro­ces­sing in Python be­zeich­net die Fähigkeit, mehrere Prozesse gleich­zei­tig aus­zu­füh­ren, wodurch die Leistung von Multi-Core-Systemen optimal genutzt wird. Im Gegensatz zu Single-Thread-Ansätzen, bei denen Aufgaben se­quen­zi­ell ab­ge­ar­bei­tet werden, können mit Mul­tipro­ces­sing ver­schie­de­ne Teile des Programms parallel und un­ab­hän­gig von­ein­an­der ablaufen. Jeder Prozess verfügt über einen eigenen Spei­cher­be­reich und kann auf separaten Pro­zes­sor­ker­nen ver­ar­bei­tet werden, wodurch sich die Aus­füh­rungs­zeit für re­chen­auf­wen­di­ge oder zeit­kri­ti­sche Ope­ra­tio­nen erheblich reduziert.

Die Ein­satz­ge­bie­te von Python Mul­tipro­ces­sing sind viel­fäl­tig. In der Da­ten­ver­ar­bei­tung und Analyse wird Mul­tipro­ces­sing häufig verwendet, um große Da­ten­sät­ze schneller zu ver­ar­bei­ten und komplexe Analysen zu be­schleu­ni­gen. Auch in Si­mu­la­tio­nen und Mo­del­lie­rungs­be­rech­nun­gen, bei­spiels­wei­se in wis­sen­schaft­li­chen An­wen­dun­gen, kann Mul­tipro­ces­sing ein­ge­setzt werden, um die Aus­füh­rungs­zei­ten von komplexen Be­rech­nun­gen zu verkürzen. Darüber hinaus findet Mul­tipro­ces­sing Anwendung im Bereich des Web-Scrapings für die gleich­zei­ti­ge Erfassung von Daten von ver­schie­de­nen Webseiten oder in der Bild­ver­ar­bei­tung sowie Computer Vision, um die Effizienz von Ope­ra­tio­nen zur Bild­ana­ly­se zu ver­bes­sern.

Web­hos­ting
Das beste Web­hos­ting zum Spit­zen­preis
  • 3x schneller und 60 % günstiger
  • Maximale Ver­füg­bar­keit mit > 99.99 %
  • Nur bei IONOS: Bis zu 500 GB Spei­cher­platz inklusive

Welche Mög­lich­kei­ten für Python Mul­tipro­ces­sing gibt es?

Python bietet ver­schie­de­ne Mög­lich­kei­ten, Mul­tipro­ces­sing zu im­ple­men­tie­ren. Im Folgenden stellen wir Ihnen drei gängige Tools vor: das multiprocessing-Modul, die concurrent.futures-Bi­blio­thek und das joblib-Paket.

Das multiprocessing-Modul

Das multiprocessing-Modul ist das Stan­dard­mo­dul für Python Mul­tipro­ces­sing. Es er­mög­licht die Er­stel­lung von Prozessen, den Austausch von Daten zwischen diesen Prozessen und die Syn­chro­ni­sie­rung durch Sperren, War­te­schlan­gen und andere Me­cha­nis­men.

import multiprocessing
def task(n):
    result = n * n
    print(f"Result: {result}")
if __name__ == "__main__":
    processes = []
    for i in range(1, 6):
        process = multiprocessing.Process(target=task, args=(i,))
        processes.append(process)
        process.start()
    for process in processes:
        process.join()
python

Im obigen Beispiel benutzen wir die Klasse multiprocessing.Process, um Prozesse zu erstellen und zu starten, die die Funktion task() ausführen. Diese berechnet das Quadrat der über­ge­be­nen Zahl. Die Prozesse werden initiiert und es wird auf ihre Be­en­di­gung gewartet, bevor das Haupt­pro­gramm fort­ge­setzt wird. Das Ergebnis geben wir mit einem f-String aus, eine Python-String-Format-Methode zum Ver­knüp­fen von Aus­drü­cken. Die Rei­hen­fol­ge ist zufällig und nicht de­ter­mi­nis­tisch.

Sie können auch einen Pro­zess­pool mit Python multiprocessing erzeugen:

import multiprocessing
def task(n):
    return n * n
if __name__ == "__main__":
    with multiprocessing.Pool() as pool:
        results = pool.map(task, range(1, 6))
        print(results)  # Output: [1, 4, 9, 16, 25]
python

Mit pool.map() wird die Funktion task() auf eine Sequenz von Daten an­ge­wen­det, und die Er­geb­nis­se werden gesammelt und aus­ge­ge­ben.

Die concurrent.futures-Bi­blio­thek

Dieses Modul bietet eine High-Level-Schnitt­stel­le für eine asyn­chro­ne Durch­füh­rung und parallele Ver­ar­bei­tung von Prozessen. Es verwendet den Pool-Executor, um Aufgaben auf einem Pool von Prozessen oder Threads aus­zu­füh­ren. Das concurrent.futures-Modul ist eine ein­fa­che­re Mög­lich­keit, asyn­chro­ne Aufgaben zu ver­ar­bei­ten, und ist in vielen Fällen leichter zu handhaben als das Python multiprocessing-Modul.

import concurrent.futures
def task(n):
    return n * n
with concurrent.futures.ProcessPoolExecutor() as executor:
    futures = [executor.submit(task, i) for i in range(1, 6)]
    for future in concurrent.futures.as_completed(futures):
        print(future.result()) # result in random order
python

Der Code nutzt das concurrent.futures-Modul, um Aufgaben parallel mit dem ProcessPoolExecutor ab­zu­ar­bei­ten. Dabei wird die Funktion task(n) für Zahlen von 1 bis 5 übergeben. Die as_completed()-Methode wartet auf den Abschluss der Aufgaben und gibt die Er­geb­nis­se in be­lie­bi­ger Rei­hen­fol­ge aus.

joblib

joblib ist eine externe Python-Bi­blio­thek, die ent­wi­ckelt wurde, um die Par­al­lel­ver­ar­bei­tung in Python zu ver­ein­fa­chen, zum Beispiel für wie­der­hol­ba­re Aufgaben wie das Ausführen von Funk­tio­nen mit un­ter­schied­li­chen Ein­gangs­pa­ra­me­tern oder das Arbeiten mit großen Da­ten­men­gen. Die Haupt­funk­tio­nen von joblib kon­zen­trie­ren sich auf die Par­al­le­li­sie­rung von Aufgaben, das Zwi­schen­spei­chern (Caching) von Funk­ti­ons­er­geb­nis­sen und die Op­ti­mie­rung von Speicher- und Re­chen­res­sour­cen.

from joblib import Parallel, delayed
def task(n):
    return n * n
results = Parallel(n_jobs=4)(delayed(task)(i) for i in range(1, 11))
print(results) # Output: Results of the function for numbers from 1 to 10
python

Der Ausdruck Parallel(n_jobs=4)(delayed(task)(i) for i in range(1, 11)) initiiert die parallele Aus­füh­rung der Funktion task() für die Zahlen von 1 bis 10. Parallel wird mit n_jobs=4 kon­fi­gu­riert, was dazu führt, dass bis zu vier parallele Jobs ver­ar­bei­tet werden können. Der Aufruf von delayed(task)(i) erstellt die parallel durch­zu­füh­ren­de Aufgabe für jede Zahl i im Bereich von 1 bis 10. Dies bedeutet, dass die Funktion task() gleich­zei­tig für jede dieser Zahlen auf­ge­ru­fen wird. Das Ergebnis für die Zahlen von 1 bis 10 wird in results ge­spei­chert und aus­ge­ge­ben.

Zum Hauptmenü