Kako koristiti Pillow u višeprocesnom okruženju?

Dec 03, 2025

Ostavi poruku

เดวิดสมิ ธ
เดวิดสมิ ธ
David เป็นนักออกแบบแม่พิมพ์อาวุโสที่ Suzhou Dongying Precision Mold Co. , Ltd. ด้วยประสบการณ์กว่า 10 ปีในการผลิตแม่พิมพ์ที่แม่นยำเขามีบทบาทสำคัญในการพัฒนาแม่พิมพ์อิสระของ บริษัท ตั้งแต่ปี 2009

Hej tamo! Ja sam dobavljač jastuka i danas ću podijeliti nekoliko savjeta o tome kako koristiti Pillow u višeprocesnom okruženju.

Prvo, hajde da shvatimo zašto bismo možda želeli da koristimo Pillow u višeprocesnoj postavci. Pillow je odlična Python biblioteka za obradu slika. Ali kada imate posla s velikim brojem slika ili složenim zadacima obrade slike, pristup s jednim procesom može biti jako spor. Tu dolazi višestruka obrada. Omogućava vam da podijelite posao na više CPU jezgara, ubrzavajući ukupno vrijeme obrade.

Preduvjeti

Prije nego što zaronimo u detalje, provjerite jeste li instalirali jastuk. Možete ga instalirati koristeći pip:

pip install jastuk

Takođe, potrebno je da imate osnovno razumevanje Pythonamultiprocesiranjemodul. Ovaj modul pruža jednostavan način za pokretanje više procesa u Pythonu.

Basic Setup

Počnimo s jednostavnim primjerom. Pretpostavimo da imate gomilu slika u direktoriju i želite da im svima promijenite veličinu. Evo kako to možete učiniti pomoću višestruke obrade i jastuka.

import os iz PIL import Image import multiprocessing def resize_image(image_path): pokušajte: sa Image.open(image_path) kao img: new_size = (img.width // 2, img.height // 2) resized_img = img.resize(new_size) output_path = os.path.'jo. os.path.basename(image_path)) resized_img.save(output_path) osim izuzetka kao e: print(f"Greška u obradi {image_path}: {e}") if __name__ == '__main__': image_dir = 'images' image_files = [in)f.path_ za [os.path_]. os.listdir(image_dir) if f.endswith(('.png', '.jpg', '.jpeg'))] ako nije os.path.exists('resized'): os.makedirs('resized') pool = multiprocessing.Pool(processes=multiprocessing.cpu_count()) poolose_count()resize poolose. pool.join() print("Sve slike su uspješno promijenjene veličine.")

U ovom kodu prvo definiramo funkcijuresize_imagekoji uzima putanju slike, otvara sliku pomoću jastuka, mijenja joj veličinu i sprema sliku promijenjene veličine u novi direktorij. Zatim, uako __name__ == '__glavni__'blok, dobijamo listu svih slikovnih datoteka uslikeimenik. Kreiramo novi direktorij pod nazivompromenjena veličinaza spremanje slika promijenjene veličine.

Zatim kreiramo amultiprocessing.Poolobjekt s brojem procesa jednakim broju dostupnih CPU jezgara. Thepool.mapfunkcija primjenjujeresize_imagefunkciju za svaku slikovnu datoteku na listi. Na kraju zatvaramo bazen i čekamo da svi procesi završe korištenjepool.close()ipool.join().

Dijeljenje resursa

Jedan od izazova u multi-procesnom okruženju je dijeljenje resursa. Na primjer, ako želite koristiti jedan jastukSlikaobjekta u više procesa, morate biti oprezni.

Python'smultiprocesiranjemodul ima različite načine za dijeljenje podataka između procesa. Jedan uobičajeni način je korištenje zajedničke memorije. Međutim, kada su u pitanju slike jastuka, obično je bolje proći putanje slika između procesa i otvoriti slike zasebno u svakom procesu. To je zato što se slike jastuka ne mogu lako serijalizirati, što znači da se ne mogu lako dijeliti između procesa.

Error Handling

Kada radite u okruženju sa više procesa, rukovanje greškama postaje još važnije. Ako jedan proces ne uspije, to ne bi trebalo srušiti cijelu operaciju. U gornjem primjeru, dodali smo pokušaj - osim bloka uresize_imagefunkciju za hvatanje svih izuzetaka koji se mogu pojaviti tokom obrade slike.

17335628263059f54c4f920cf28f75e407089c30353d620250331085854

Razmatranja performansi

Iako višestruka obrada može značajno ubrzati obradu slike, to nije uvijek najbolje rješenje. Postoje dodatni troškovi povezani sa kreiranjem i upravljanjem više procesa. Dakle, ako imate posla s malim brojem slika ili jednostavnim zadacima, pristup s jednim procesom mogao bi biti brži.

Također, pazite da ne preopterećujete sistem stvaranjem previše procesa. U gornjem primjeru koristili smomultiprocessing.cpu_count()da se odredi broj procesa. Ovo je dobra početna tačka, ali ćete je možda morati prilagoditi na osnovu vašeg specifičnog sistema i zahtjeva zadatka.

Slučajevi upotrebe u našem poslovanju

Kao dobavljač jastuka, koristimo višeprocesnu obradu slike na nekoliko načina. Na primjer, kada primimo veliku narudžbu odNavlaka za jastuk, moramo obraditi slike proizvoda za našu web stranicu. Koristimo višestruku obradu za brzo mijenjanje veličine, izrezivanje i dodavanje vodenih žigova ovim slikama.

Drugi slučaj upotrebe je kada radimo na novomJastukdizajni. Možda ćemo morati da generišemo više varijacija istog dizajna, a višestruka obrada nam pomaže da to uradimo na vreme.

Takođe koristimo višestruku obradu za kontrolu kvaliteta. Možemo obraditi slike gotovih proizvoda kako bismo provjerili ima li nedostataka. Na primjer, možemo koristiti Jastuk da otkrijemo jesu li šavovi na jastučnici ravni ili ima mrlja na jastuku.

Zaključak

Upotreba jastuka u višeprocesnom okruženju može biti moćan način za ubrzavanje zadataka obrade slika. Podjelom posla na više CPU jezgara, možete efikasnije upravljati velikim količinama slika. Međutim, važno je uzeti u obzir troškove višestruke obrade i pravilno postupati s greškama.

Ako ste na tržištu visokog kvalitetaJastukproizvode ili vam je potrebna pomoć oko obrade slika za vaše poslovanje, ne ustručavajte se kontaktirati. Tu smo da vam pomognemo sa svim vašim potrebama vezanim za jastuke i možemo vam pružiti najbolja rješenja za vaše zahtjeve obrade slika. Bilo da ste mala firma ili velika korporacija, imamo stručnost i resurse da zadovoljimo vaše potrebe.

Reference

  • Python dokumentacija za višeprocesiranje
  • Službena dokumentacija jastuka

To je sve za današnji blog. Nadam se da vam je bilo korisno. Ako imate bilo kakvih pitanja ili komentara, slobodno ih ostavite ispod.

Pošaljite upit