Wie verwende ich Pillow in einer Umgebung mit mehreren Prozessen?

Dec 03, 2025

Eine Nachricht hinterlassen

David Smith
David Smith
David est concepteur de moisissures seniors chez Suzhou Dongying Precision Mold Co., Ltd. Avec plus de 10 ans d'expérience dans la production de moisissures de précision, il a joué un rôle clé dans le développement de moisissures indépendantes de l'entreprise depuis 2009.

Hallo! Ich bin ein Lieferant von Pillow und werde heute einige Tipps zur Verwendung von Pillow in einer Umgebung mit mehreren Prozessen geben.

Lassen Sie uns zunächst verstehen, warum wir Pillow möglicherweise in einem Multiprozess-Setup verwenden möchten. Pillow ist eine großartige Python-Bibliothek für die Bildverarbeitung. Wenn Sie es jedoch mit einer großen Anzahl von Bildern oder komplexen Bildverarbeitungsaufgaben zu tun haben, kann ein Einzelprozessansatz sehr langsam sein. Hier kommt Multi-Processing ins Spiel. Es ermöglicht Ihnen, die Arbeit auf mehrere CPU-Kerne aufzuteilen und so die Gesamtverarbeitungszeit zu beschleunigen.

Voraussetzungen

Bevor wir uns mit den Details befassen, stellen Sie sicher, dass Sie Pillow installiert haben. Sie können es mit pip installieren:

Pip Kissen installieren

Außerdem müssen Sie über grundlegende Kenntnisse von Python verfügenMehrfachverarbeitungModul. Dieses Modul bietet eine einfache Möglichkeit, mehrere Prozesse in Python auszuführen.

Grundeinrichtung

Beginnen wir mit einem einfachen Beispiel. Angenommen, Sie haben eine Reihe von Bildern in einem Verzeichnis und möchten die Größe aller Bilder ändern. Hier erfahren Sie, wie Sie dies mit Multi-Processing und Pillow tun können.

Betriebssystem aus PIL importieren Import Bildimport Multiprocessing def resize_image(image_path): versuchen: mit Image.open(image_path) als img: new_size = (img.width // 2, img.height // 2) resized_img = img.resize(new_size) Output_path = os.path.join('resized', os.path.basename(image_path)) resized_img.save(output_path) außer Ausnahme als e: print(f"Fehler bei der Verarbeitung von {image_path}: {e}") if __name__ == '__main__': image_dir = 'images' image_files = [os.path.join(image_dir, f) for f in os.listdir(image_dir) if f.endswith(('.png', '.jpg', '.jpeg'))] wenn nicht os.path.exists('resized'): os.makedirs('resized') pool = multiprocessing.Pool(processes=multiprocessing.cpu_count()) pool.map(resize_image, image_files) pool.close() pool.join() print("Alle Bilder wurden erfolgreich in der Größe geändert.")

In diesem Code definieren wir zunächst eine Funktionresize_imageDas nimmt einen Bildpfad, öffnet das Bild mit Pillow, ändert seine Größe und speichert das in der Größe geänderte Bild in einem neuen Verzeichnis. Dann, imif __name__ == '__main__'Block erhalten wir eine Liste aller Bilddateien imBilderVerzeichnis. Wir erstellen ein neues Verzeichnis mit dem Namenverkleinertum die verkleinerten Bilder zu speichern.

Wir erstellen dann einemultiprocessing.PoolObjekt mit der Anzahl der Prozesse, die der Anzahl der verfügbaren CPU-Kerne entspricht. Derpool.mapFunktion wendet die anresize_imageFunktion für jede Bilddatei in der Liste. Schließlich schließen wir den Pool und warten, bis die Verwendung aller Prozesse abgeschlossen istpool.close()Undpool.join().

Ressourcen teilen

Eine der Herausforderungen in einer Umgebung mit mehreren Prozessen ist die gemeinsame Nutzung von Ressourcen. Wenn Sie beispielsweise ein einzelnes Kissen verwenden möchtenBildWenn Sie ein Objekt über mehrere Prozesse hinweg verarbeiten, müssen Sie vorsichtig sein.

PythonsMehrfachverarbeitungDas Modul bietet verschiedene Möglichkeiten, Daten zwischen Prozessen auszutauschen. Eine gängige Methode ist die Verwendung von Shared Memory. Wenn es jedoch um Pillow-Bilder geht, ist es normalerweise besser, die Bildpfade zwischen Prozessen zu übergeben und die Bilder in jedem Prozess separat zu öffnen. Dies liegt daran, dass Pillow-Bilder nicht einfach serialisierbar sind, was bedeutet, dass sie nicht einfach zwischen Prozessen geteilt werden können.

Fehlerbehandlung

Bei der Arbeit in einer Umgebung mit mehreren Prozessen wird die Fehlerbehandlung noch wichtiger. Wenn ein Prozess fehlschlägt, sollte dies nicht den gesamten Vorgang zum Scheitern bringen. Im obigen Beispiel haben wir einen try-exclusive-Block hinzugefügtresize_imageFunktion zum Abfangen von Ausnahmen, die während der Bildverarbeitung auftreten könnten.

17335628263059f54c4f920cf28f75e407089c30353d620250331085854

Leistungsüberlegungen

Obwohl Multiverarbeitung die Bildverarbeitung erheblich beschleunigen kann, ist dies nicht immer die beste Lösung. Mit der Erstellung und Verwaltung mehrerer Prozesse ist ein Mehraufwand verbunden. Wenn Sie also mit einer kleinen Anzahl von Bildern oder einfachen Aufgaben zu tun haben, ist ein Einzelprozess-Ansatz möglicherweise schneller.

Stellen Sie außerdem sicher, dass Sie Ihr System nicht durch die Erstellung zu vieler Prozesse überlasten. Im obigen Beispiel haben wir verwendetmultiprocessing.cpu_count()um die Anzahl der Prozesse zu bestimmen. Dies ist ein guter Ausgangspunkt, Sie müssen ihn jedoch möglicherweise an Ihre spezifischen System- und Aufgabenanforderungen anpassen.

Anwendungsfälle in unserem Unternehmen

Als Kissenlieferant nutzen wir die Multiprozess-Bildverarbeitung auf verschiedene Weise. Zum Beispiel, wenn wir eine große Bestellung erhaltenKissenbezug, wir müssen Produktbilder für unsere Website verarbeiten. Wir verwenden Multiverarbeitung, um die Größe dieser Bilder schnell zu ändern, sie zuzuschneiden und ihnen Wasserzeichen hinzuzufügen.

Ein weiterer Anwendungsfall ist die Arbeit an neuen ProduktenKissenEntwürfe. Möglicherweise müssen wir mehrere Variationen desselben Designs erstellen, und die Mehrfachverarbeitung hilft uns dabei, dies zeitnah zu erledigen.

Zur Qualitätskontrolle setzen wir auch Multi-Processing ein. Wir können Bilder der fertigen Produkte verarbeiten, um sie auf etwaige Mängel zu prüfen. Mit Pillow können wir beispielsweise erkennen, ob die Naht eines Kissenbezugs gerade ist oder ob Flecken auf dem Kissen vorhanden sind.

Abschluss

Die Verwendung von Pillow in einer Umgebung mit mehreren Prozessen kann eine leistungsstarke Möglichkeit sein, Bildverarbeitungsaufgaben zu beschleunigen. Durch die Aufteilung der Arbeit auf mehrere CPU-Kerne können Sie große Bildmengen effizienter verarbeiten. Es ist jedoch wichtig, den Overhead der Mehrfachverarbeitung zu berücksichtigen und Fehler ordnungsgemäß zu behandeln.

Wenn Sie auf der Suche nach hoher Qualität sindKissenProdukte oder benötigen Hilfe bei der Bildverarbeitung für Ihr Unternehmen, zögern Sie nicht, uns zu kontaktieren. Wir sind hier, um Ihnen bei allen Fragen rund um Ihr Kissen zu helfen und können Ihnen die besten Lösungen für Ihre Bildverarbeitungsanforderungen bieten. Ganz gleich, ob Sie ein kleines Unternehmen oder ein großer Konzern sind, wir verfügen über das Fachwissen und die Ressourcen, um Ihre Bedürfnisse zu erfüllen.

Referenzen

  • Python-Multiprocessing-Dokumentation
  • Offizielle Dokumentation des Kissens

Das ist alles für den heutigen Blog. Ich hoffe, Sie fanden es nützlich. Wenn Sie Fragen oder Kommentare haben, können Sie diese gerne unten hinterlassen.

Anfrage senden