Heim >Backend-Entwicklung >Python-Tutorial >Python-Multithreading und Multiprozess: Praktische Fallanalyse, Beherrschung der Anwendungsfähigkeiten der gleichzeitigen Programmierung

Python-Multithreading und Multiprozess: Praktische Fallanalyse, Beherrschung der Anwendungsfähigkeiten der gleichzeitigen Programmierung

WBOY
WBOYnach vorne
2024-02-25 09:13:36479Durchsuche

Python 多线程与多进程:实战案例剖析,掌握并发编程的应用技巧

1. Python Multi-Threading und Multi-Prozess-Übersicht

1. Multithreading

Multiple Threads ist eine concurrent programming-Technologie, die es einem Programm ermöglicht, mehrere Aufgaben gleichzeitig auszuführen. In Python können Sie das Threading-Modul verwenden, um Threads zu erstellen und zu verwalten. Threads teilen sich den Speicherplatz des Programms, sodass Daten problemlos gemeinsam genutzt werden können. Allerdings bringt die Multithread-Programmierung auch einige Herausforderungen mit sich, wie z. B. Thread-Sicherheitsprobleme und tote Lock-Probleme. 2. Multiprozess Multiprocessing ist eine

Parallelität

Programmiertechnik, die es einem Programm ermöglicht, mehrere Aufgaben gleichzeitig auszuführen. In Python können Sie das Multiprocessing-Modul zum Erstellen und Verwalten von Prozessen verwenden. Der Prozess ist unabhängig vom Speicherplatz des Programms, sodass keine Probleme mit der Thread-Sicherheit bestehen. Die Multiprozessprogrammierung bringt jedoch auch einige Herausforderungen mit sich, wie z. B. Kommunikations- und Synchronisierungsprobleme zwischen Prozessen. 2. Praktischer Fall 1: Verwendung von Multithreads zur Beschleunigung der Bildverarbeitung

Anforderungen: Es gibt einen Ordner mit 1000 Bildern, und jedes Bild muss verarbeitet werden, einschließlich Größenänderung, Schärfung und Hinzufügen von Wasserzeichen.

Lösung:

Multithreading kann verwendet werden, um die Bildverarbeitung zu beschleunigen. Die spezifischen Schritte sind wie folgt:

Speichern Sie zunächst die Liste der Bilddateien in einer Liste.

Dann verwenden Sie das Threading-Modul, um einen Thread-Pool

zu erstellen.
  1. Als nächstes weisen Sie den Threads im Thread-Pool Bildverarbeitungsaufgaben zu.
  2. Abschließend, nachdem Sie darauf gewartet haben, dass alle Threads ihre Aufgaben abgeschlossen haben, speichern Sie das verarbeitete Bild in einer Datei.
  3. Durch die Verwendung von Multithreading kann die Bildverarbeitungszeit erheblich reduziert werden.
  4. import threading
    import os
    from PIL import Image, ImageFilter
    
    def process_image(image_path):
    image = Image.open(image_path)
    image = image.resize((256, 256))
    image = image.filter(ImageFilter.SHARPEN)
    image.save(image_path)
    
    def main():
    # 获取图像文件列表
    image_files = os.listdir("images")
    
    # 创建线程池
    pool = ThreadPool(4)
    
    # 将图像处理任务分配给线程池
    for image_file in image_files:
    pool.submit(process_image, ("images/" + image_file, ))
    
    # 等待所有线程完成任务
    pool.close()
    pool.join()
    
    if __name__ == "__main__":
    main()
  5. 3. Praktischer Fall 2: Verwendung von Multiprozessen zur Beschleunigung des wissenschaftlichen Rechnens
Anforderungen:

Es muss eine wissenschaftliche Berechnung durchgeführt werden, die eine große Anzahl von Gleitkommaberechnungen umfasst.

Lösung:

Mehrere Prozesse können verwendet werden, um wissenschaftliche Berechnungen zu beschleunigen. Die spezifischen Schritte sind wie folgt:

Unterteilen Sie zunächst die wissenschaftliche Rechenaufgabe in mehrere Teilaufgaben.

Dann verwenden Sie das Multiprocessing-Modul, um den Prozesspool zu erstellen.

Als nächstes weisen Sie Unteraufgaben den Prozessen im Prozesspool zu.
  1. Warten Sie abschließend, bis alle Prozesse ihre Aufgaben abgeschlossen haben, und fassen Sie dann die Ergebnisse der Teilaufgaben zusammen.
  2. Durch die Verwendung mehrerer Prozesse kann die Zeit für wissenschaftliche Berechnungen erheblich verkürzt werden.
  3. import multiprocessing
    import math
    
    def compute_pi(n):
    result = 0
    for i in range(n):
    result += 4 * (-1)**i / (2*i + 1)
    return result
    
    def main():
    # 分解科学计算任务
    n = 100000000
    num_processes = 4
    sub_tasks = [n // num_processes] * num_processes
    
    # 创建进程池
    pool = multiprocessing.Pool(num_processes)
    
    # 将子任务分配给进程池
    results = pool.map(compute_pi, sub_tasks)
    
    # 等待所有进程完成任务
    pool.close()
    pool.join()
    
    # 汇总子任务的结果
    pi = sum(results)
    
    print("π =", pi)
    
    if __name__ == "__main__":
    main()
  4. IV.
  5. Zusammenfassung

Anhand der beiden oben genannten praktischen Fälle haben wir die leistungsstarke Leistung von Multithreading und Multiprozess in der gleichzeitigen Programmierung gesehen. In der tatsächlichen

Entwicklung

können wir entsprechend den spezifischen Anforderungen die geeignete Technologie für gleichzeitige Programmierung auswählen.

Das obige ist der detaillierte Inhalt vonPython-Multithreading und Multiprozess: Praktische Fallanalyse, Beherrschung der Anwendungsfähigkeiten der gleichzeitigen Programmierung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:lsjlt.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen