Come utilizzare Pillow in un ambiente multiprocesso?

Dec 03, 2025

Lasciate un messaggio

David Smith
David Smith
David è un senior stampo designer presso la Suzhou Dongying Precision Mold Co., Ltd. con oltre 10 anni di esperienza nella produzione di stampo di precisione, ha svolto un ruolo chiave nello sviluppo indipendente dello stampo dell'azienda dal 2009.

Ehilà! Sono un fornitore di Pillow e oggi condividerò alcuni suggerimenti su come utilizzare Pillow in un ambiente multiprocesso.

Prima di tutto, capiamo perché potremmo voler utilizzare Pillow in una configurazione multiprocesso. Pillow è un'ottima libreria Python per l'elaborazione delle immagini. Ma quando si ha a che fare con un gran numero di immagini o con attività complesse di elaborazione delle immagini, un approccio a processo singolo può essere davvero lento. È qui che entra in gioco la multielaborazione. Ti consente di suddividere il lavoro su più core della CPU, accelerando il tempo di elaborazione complessivo.

Prerequisiti

Prima di immergerci nei dettagli, assicurati di aver installato Pillow. Puoi installarlo usando pip:

cuscino di installazione pip

Inoltre, è necessario avere una conoscenza di base di Pythonmultielaborazionemodulo. Questo modulo fornisce un modo semplice per eseguire più processi in Python.

Configurazione di base

Cominciamo con un semplice esempio. Supponiamo di avere un sacco di immagini in una directory e di volerle ridimensionare tutte. Ecco come puoi farlo utilizzando la multielaborazione e Pillow.

import os from PIL import Image import multiprocessing def resize_image(image_path): prova: with 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('resize', os.path.basename(image_path)) resized_img.save(output_path) tranne Eccezione come e: print(f"Errore durante l'elaborazione di {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'))] se non os.path.exists('resize'): os.makedirs('resize') pool = multiprocessing.Pool(processes=multiprocessing.cpu_count()) pool.map(resize_image, image_files) pool.close() pool.join() print("Tutte le immagini sono state ridimensionate correttamente.")

In questo codice definiamo innanzitutto una funzioneridimensiona_immagineche prende un percorso immagine, apre l'immagine utilizzando Pillow, la ridimensiona e salva l'immagine ridimensionata in una nuova directory. Poi, nelse __nome__ == '__principale__'blocco, otteniamo un elenco di tutti i file di immagine nel fileimmaginidirectory. Creiamo una nuova directory chiamataridimensionatoper memorizzare le immagini ridimensionate.

Creiamo quindi unmultiprocessing.Poologgetto con il numero di processi pari al numero di core della CPU disponibili. ILpiscina.mappala funzione applica ilridimensiona_immaginefunzione per ogni file immagine nell'elenco. Infine, chiudiamo il pool e aspettiamo che tutti i processi finiscano di essere utilizzatipiscina.chiudi()Epool.join().

Condivisione delle risorse

Una delle sfide in un ambiente multiprocesso è la condivisione delle risorse. Ad esempio, se desideri utilizzare un singolo cuscinoImmagineoggetto su più processi, è necessario prestare attenzione.

Di Pitonemultielaborazioneil modulo ha diversi modi per condividere i dati tra i processi. Un modo comune è utilizzare la memoria condivisa. Tuttavia, quando si tratta di immagini Pillow, in genere è meglio passare i percorsi delle immagini tra processi e aprire le immagini separatamente in ciascun processo. Questo perché le immagini Pillow non sono facilmente serializzabili, il che significa che non possono essere facilmente condivise tra processi.

Gestione degli errori

Quando si lavora in un ambiente multiprocesso, la gestione degli errori diventa ancora più importante. Se un processo fallisce, non dovrebbe interrompere l'intera operazione. Nell'esempio sopra abbiamo aggiunto un try - tranne il blocco nel fileridimensiona_immaginefunzione per rilevare eventuali eccezioni che potrebbero verificarsi durante l'elaborazione delle immagini.

17335628263059f54c4f920cf28f75e407089c30353d620250331085854

Considerazioni sulle prestazioni

Sebbene l'elaborazione multipla possa accelerare notevolmente l'elaborazione delle immagini, non è sempre la soluzione migliore. È presente un sovraccarico associato alla creazione e alla gestione di più processi. Pertanto, se hai a che fare con un numero limitato di immagini o attività semplici, un approccio a processo singolo potrebbe essere più veloce.

Inoltre, assicurati di non sovraccaricare il tuo sistema creando troppi processi. Nell'esempio sopra, abbiamo usatomultiprocessing.cpu_count()per determinare il numero di processi. Questo è un buon punto di partenza, ma potrebbe essere necessario modificarlo in base ai requisiti specifici del sistema e dell'attività.

Casi d'uso nella nostra attività

In qualità di fornitore di cuscini, utilizziamo l'elaborazione delle immagini multiprocesso in diversi modi. Ad esempio, quando riceviamo un grosso ordine diFodera per cuscino, dobbiamo elaborare le immagini dei prodotti per il nostro sito web. Utilizziamo l'elaborazione multipla per ridimensionare, ritagliare e aggiungere rapidamente filigrane a queste immagini.

Un altro caso d'uso è quando stiamo lavorando su newCuscinodisegni. Potrebbe essere necessario generare più varianti dello stesso progetto e l'elaborazione multipla ci aiuta a farlo in modo tempestivo.

Utilizziamo anche la multielaborazione per il controllo di qualità. Possiamo elaborare le immagini dei prodotti finiti per verificare eventuali difetti. Ad esempio, possiamo utilizzare Pillow per rilevare se le cuciture sulla fodera di un cuscino sono diritte o se sono presenti macchie sul cuscino.

Conclusione

L'utilizzo di Pillow in un ambiente multiprocesso può essere un modo efficace per accelerare le attività di elaborazione delle immagini. Suddividendo il lavoro su più core della CPU, puoi gestire grandi volumi di immagini in modo più efficiente. Tuttavia, è importante considerare il sovraccarico dell'elaborazione multipla e gestire correttamente gli errori.

Se cerchi l'alta qualitàCuscinoprodotti o hai bisogno di aiuto con l'elaborazione delle immagini per la tua attività, non esitare a contattarci. Siamo qui per aiutarti con tutte le tue esigenze relative ai cuscini e possiamo fornirti le migliori soluzioni per le tue esigenze di elaborazione delle immagini. Che tu sia una piccola impresa o una grande azienda, abbiamo le competenze e le risorse per soddisfare le tue esigenze.

Riferimenti

  • Documentazione multiprocessore Python
  • Documentazione ufficiale del cuscino

Per il blog di oggi è tutto. Spero che tu l'abbia trovato utile. Se hai domande o commenti, sentiti libero di lasciarli qui sotto.

Invia la tua richiesta