Cum se utilizează Pillow într-un mediu cu mai multe procese?

Dec 03, 2025

Lăsaţi un mesaj

David Smith
David Smith
David este un designer de mucegai senior la Suzhou Dongying Precision Mold Co., Ltd., cu peste 10 ani de experiență în producția de mucegaiuri de precizie, a jucat un rol cheie în dezvoltarea independentă a mucegaiului companiei din 2009.

Hei acolo! Sunt furnizor de Pillow, iar astăzi voi împărtăși câteva sfaturi despre cum să utilizați Pillow într-un mediu cu mai multe procese.

În primul rând, să înțelegem de ce am putea dori să folosim Pillow într-o configurare cu mai multe procese. Pillow este o bibliotecă Python excelentă pentru procesarea imaginilor. Dar atunci când aveți de-a face cu un număr mare de imagini sau cu sarcini complexe de procesare a imaginilor, o abordare cu un singur proces poate fi foarte lentă. Acolo intervine procesarea multiplă. Vă permite să împărțiți munca în mai multe nuclee CPU, grăbind timpul total de procesare.

Cerințe preliminare

Înainte de a ne aprofunda în detalii, asigurați-vă că aveți instalată Pillow. Îl puteți instala folosind pip:

pip install perna

De asemenea, trebuie să aveți o înțelegere de bază a lui Pythonmultiprocesaremodul. Acest modul oferă o modalitate simplă de a rula mai multe procese în Python.

Configurare de bază

Să începem cu un exemplu simplu. Să presupunem că aveți o grămadă de imagini într-un director și doriți să le redimensionați pe toate. Iată cum o puteți face folosind multi-procesare și Pillow.

import os din PIL import Image import multiprocessing def resize_image(image_path): încercați: cu Image.open(image_path) as img: new_size = (img.width // 2, img.height // 2) resized_img = img.resize(new_size) output_path = os.path.join) resized_img.save(output_path) cu excepția excepției ca e: print(f"Eroare la procesarea {image_path}: {e}") if __name__ == '__main__': image_dir = 'images' image_files = [os.path.join(image_dir, f) pentru f în os.listdir(image_dir,,,f.p. '.jpeg'))] dacă nu os.path.exists('redimensionat'): os.makedirs('redimensionat') pool = multiprocessing.Pool(processes=multiprocessing.cpu_count()) pool.map(resize_image, image_files) pool.close() pool.join() print("Toate imaginile") redimensionat cu succes.

În acest cod, definim mai întâi o funcțieredimensionare_imaginecare ia o cale de imagine, deschide imaginea folosind Pillow, o redimensionează și salvează imaginea redimensionată într-un director nou. Apoi, înif __name__ == '__main__'bloc, obținem o listă cu toate fișierele imagine din fișierulimaginidirector. Creăm un nou director numitredimensionatpentru a stoca imaginile redimensionate.

Creăm apoi unmultiprocesare.Piscinăobiect cu numărul de procese egal cu numărul de nuclee CPU disponibile. Thebazin.hartăfuncția aplicăredimensionare_imaginefuncție pentru fiecare fișier imagine din listă. În cele din urmă, închidem piscina și așteptăm ca toate procesele să se termine de utilizatpool.close()şipool.join().

Partajarea resurselor

Una dintre provocările într-un mediu cu mai multe procese este partajarea resurselor. De exemplu, dacă doriți să utilizați o singură pernăImagineobiect în mai multe procese, trebuie să fii atent.

Al lui Pythonmultiprocesaremodulul are diferite moduri de a partaja date între procese. O modalitate comună este utilizarea memoriei partajate. Cu toate acestea, când vine vorba de imaginile Pillow, de obicei este mai bine să treceți căile imaginii între procese și să deschideți imaginile separat în fiecare proces. Acest lucru se datorează faptului că imaginile Pillow nu sunt ușor de serializat, ceea ce înseamnă că nu pot fi partajate cu ușurință între procese.

Gestionarea erorilor

Când lucrați într-un mediu cu mai multe procese, tratarea erorilor devine și mai importantă. Dacă un proces eșuează, nu ar trebui să distrugă întreaga operațiune. În exemplul de mai sus, am adăugat un try - cu excepția blocului înredimensionare_imaginefuncția pentru a detecta orice excepții care ar putea apărea în timpul procesării imaginii.

17335628263059f54c4f920cf28f75e407089c30353d620250331085854

Considerații de performanță

Deși procesarea multiplă poate accelera semnificativ procesarea imaginilor, nu este întotdeauna cea mai bună soluție. Există o suprasarcină asociată cu crearea și gestionarea mai multor procese. Deci, dacă aveți de-a face cu un număr mic de imagini sau sarcini simple, o abordare cu un singur proces ar putea fi mai rapidă.

De asemenea, asigurați-vă că nu vă supraîncărcați sistemul creând prea multe procese. În exemplul de mai sus, am folositmultiprocessing.cpu_count()pentru a determina numărul de procese. Acesta este un bun punct de plecare, dar poate fi necesar să-l ajustați în funcție de cerințele specifice ale sistemului și ale sarcinii.

Cazuri de utilizare în afacerea noastră

În calitate de furnizor Pillow, folosim procesarea imaginilor cu mai multe procese în mai multe moduri. De exemplu, când primim o comandă mare deHusa de perna, trebuie să procesăm imagini ale produselor pentru site-ul nostru web. Folosim procesarea multiplă pentru a redimensiona, decupa și adăuga rapid filigrane acestor imagini.

Un alt caz de utilizare este atunci când lucrăm la noiPernădesene. Este posibil să fie nevoie să generăm mai multe variații ale aceluiași design, iar procesarea multiplă ne ajută să facem acest lucru în timp util.

De asemenea, folosim multi-procesare pentru controlul calității. Putem prelucra imagini ale produselor finite pentru a verifica eventualele defecte. De exemplu, putem folosi Pillow pentru a detecta dacă cusăturile de pe o husă de pernă sunt drepte sau dacă există pete pe pernă.

Concluzie

Utilizarea Pillow într-un mediu cu mai multe procese poate fi o modalitate puternică de a accelera sarcinile de procesare a imaginilor. Împărțind munca în mai multe nuclee CPU, puteți gestiona mai eficient volume mari de imagini. Cu toate acestea, este important să luați în considerare costul general al procesării multiple și să gestionați corect erorile.

Dacă sunteți pe piață pentru calitate înaltăPernăproduse sau aveți nevoie de ajutor cu procesarea imaginii pentru afacerea dvs., nu ezitați să contactați. Suntem aici pentru a vă ajuta cu toate nevoile legate de pernă și vă putem oferi cele mai bune soluții pentru cerințele dvs. de procesare a imaginii. Indiferent dacă sunteți o afacere mică sau o mare corporație, avem expertiza și resursele necesare pentru a vă satisface nevoile.

Referințe

  • Documentația de multiprocesare Python
  • Documentație oficială pernă

Asta e tot pentru blogul de azi. Sper că l-ai găsit util. Dacă aveți întrebări sau comentarii, nu ezitați să le lăsați mai jos.

Trimite anchetă