Como usar o Pillow em um ambiente multiprocesso?

Dec 03, 2025

Deixe um recado

Дейвид Смит
Дейвид Смит
Дейвид е старши дизайнер на плесени в Suzhou Dongying Precision Mold Co., Ltd. С над 10 -годишен опит в производството на прецизно плесени, той е играл ключова роля в независимия разработка на плесени на компанията от 2009 г.

Ei! Sou fornecedor de Pillow e hoje vou compartilhar algumas dicas de como utilizar o Pillow em um ambiente multiprocesso.

Primeiro, vamos entender por que podemos querer usar o Pillow em uma configuração de vários processos. Pillow é uma ótima biblioteca Python para processamento de imagens. Mas quando você lida com um grande número de imagens ou tarefas complexas de processamento de imagens, uma abordagem de processo único pode ser muito lenta. É aí que entra o multiprocessamento. Ele permite dividir o trabalho em vários núcleos de CPU, acelerando o tempo geral de processamento.

Pré-requisitos

Antes de mergulharmos nos detalhes, certifique-se de ter o Pillow instalado. Você pode instalá-lo usando pip:

almofada de instalação pip

Além disso, você precisa ter um conhecimento básico do Pythonmultiprocessamentomódulo. Este módulo fornece uma maneira simples de executar vários processos em Python.

Configuração básica

Vamos começar com um exemplo simples. Suponha que você tenha várias imagens em um diretório e queira redimensioná-las todas. Veja como você pode fazer isso usando multiprocessamento e Pillow.

import os from PIL import Image import multiprocessing def resize_image(image_path): try: 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('resized', os.path.basename(image_path)) resized_img.save (output_path) exceto exceção como e: print (f"Erro ao processar {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 não 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("Todas as imagens redimensionadas com sucesso.")

Neste código, primeiro definimos uma funçãoredimensionar_imagemque segue um caminho de imagem, abre a imagem usando Pillow, redimensiona-a e salva a imagem redimensionada em um novo diretório. Então, nose __nome__ == '__principal__'bloco, obtemos uma lista de todos os arquivos de imagem noimagensdiretório. Criamos um novo diretório chamadoredimensionadopara armazenar as imagens redimensionadas.

Criamos então ummultiprocessamento.Poolobjeto com o número de processos igual ao número de núcleos de CPU disponíveis. Opiscina.mapafunção aplica oredimensionar_imagemfunção para cada arquivo de imagem na lista. Por fim, fechamos o pool e esperamos que todos os processos terminem de usarpiscina.fechar()epool.join().

Compartilhando recursos

Um dos desafios em um ambiente multiprocesso é o compartilhamento de recursos. Por exemplo, se você quiser usar uma única almofadaImagemobjeto em vários processos, você precisa ter cuidado.

PythonmultiprocessamentoO módulo possui diferentes maneiras de compartilhar dados entre processos. Uma maneira comum é usar memória compartilhada. Porém, quando se trata de imagens Pillow, geralmente é melhor passar os caminhos das imagens entre os processos e abrir as imagens separadamente em cada processo. Isso ocorre porque as imagens Pillow não são facilmente serializáveis, o que significa que não podem ser facilmente compartilhadas entre processos.

Tratamento de erros

Ao trabalhar em um ambiente multiprocesso, o tratamento de erros se torna ainda mais importante. Se um processo falhar, isso não deverá interromper toda a operação. No exemplo acima, adicionamos um bloco try - except noredimensionar_imagemfunção para capturar quaisquer exceções que possam ocorrer durante o processamento da imagem.

17335628263059f54c4f920cf28f75e407089c30353d620250331085854

Considerações de desempenho

Embora o multiprocessamento possa acelerar significativamente o processamento de imagens, nem sempre é a melhor solução. Há uma sobrecarga associada à criação e ao gerenciamento de vários processos. Portanto, se você estiver lidando com um pequeno número de imagens ou tarefas simples, uma abordagem de processo único pode ser mais rápida.

Além disso, certifique-se de não sobrecarregar seu sistema criando muitos processos. No exemplo acima, usamosmultiprocessing.cpu_count()para determinar o número de processos. Este é um bom ponto de partida, mas pode ser necessário ajustá-lo com base nos requisitos específicos do sistema e da tarefa.

Casos de uso em nosso negócio

Como fornecedor de travesseiros, usamos processamento de imagem multiprocesso de diversas maneiras. Por exemplo, quando recebemos uma grande encomenda deFronha, precisamos processar imagens de produtos para nosso site. Usamos multiprocessamento para redimensionar, cortar e adicionar marcas d'água a essas imagens rapidamente.

Outro caso de uso é quando estamos trabalhando em novosTravesseiroprojetos. Podemos precisar gerar múltiplas variações do mesmo design, e o multiprocessamento nos ajuda a fazer isso em tempo hábil.

Também usamos multiprocessamento para controle de qualidade. Podemos processar imagens dos produtos acabados para verificar quaisquer defeitos. Por exemplo, podemos usar Pillow para detectar se a costura de uma fronha é reta ou se há alguma mancha no travesseiro.

Conclusão

Usar o Pillow em um ambiente de vários processos pode ser uma maneira poderosa de acelerar as tarefas de processamento de imagens. Ao dividir o trabalho em vários núcleos de CPU, você pode lidar com grandes volumes de imagens com mais eficiência. No entanto, é importante considerar a sobrecarga do multiprocessamento e tratar os erros de maneira adequada.

Se você está no mercado de alta qualidadeTravesseiroprodutos ou precisar de ajuda com processamento de imagens para sua empresa, não hesite em entrar em contato. Estamos aqui para ajudá-lo com todas as suas necessidades relacionadas a travesseiros e podemos fornecer as melhores soluções para suas necessidades de processamento de imagem. Quer você seja uma pequena empresa ou uma grande corporação, temos a experiência e os recursos para atender às suas necessidades.

Referências

  • Documentação de multiprocessamento Python
  • Documentação oficial do travesseiro

Isso é tudo no blog de hoje. Espero que você tenha achado útil. Se você tiver alguma dúvida ou comentário, fique à vontade para deixá-los abaixo.

Enviar inquérito