Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprenda Desafio: O Coletor Paralelo de Quadrados | Multithreading vs. Multiprocessing
Programação Estrutural em Python
Seção 3. Capítulo 5
single

single

Desafio: O Coletor Paralelo de Quadrados

Deslize para mostrar o menu

Multiprocessamento em Python permite executar múltiplos processos em paralelo, cada um com seu próprio interpretador Python e espaço de memória. Essa abordagem é especialmente útil para tarefas que exigem uso intensivo da CPU, onde é possível aproveitar múltiplos núcleos para realizar cálculos de forma mais rápida. Utilizando multiprocessamento, é possível melhorar significativamente o desempenho em operações que demandam grande capacidade de processamento, como processamento de dados, cálculos científicos ou simulações.

Note
Nota

A classe multiprocessing.Manager oferece uma forma de criar objetos compartilhados – como listas e dicionários – que podem ser acessados e modificados com segurança por múltiplos processos. Quando for necessário coletar resultados ou coordenar dados entre diferentes instâncias de Process, utilize sempre um Manager para criar esses objetos compartilhados. Listas e dicionários comuns do Python não são compartilhados entre processos, portanto, alterações feitas em um processo não serão visíveis para os outros. Com uma lista de Manager, cada processo pode adicionar ou modificar dados, e todas as alterações serão visíveis para todos os processos que utilizam esse objeto compartilhado.

1234567891011121314151617181920
from multiprocessing import Process, Manager def add_value(value, shared_list): shared_list.append(value) if __name__ == "__main__": manager = Manager() shared_list = manager.list() processes = [] values = [10, 20, 30, 40, 50] for v in values: p = Process(target=add_value, args=(v, shared_list)) processes.append(p) p.start() for p in processes: p.join() print("Collected results:", list(shared_list))

Este código demonstra como usar o multiprocessing.Manager para criar uma lista compartilhada que vários processos podem acessar e modificar. Cada processo calcula o quadrado de um número e adiciona seu resultado à lista compartilhada. Ao utilizar uma lista do Manager, garante-se que todos os processos possam compartilhar e coletar dados com segurança, tornando possível reunir resultados de processos distintos executados em paralelo.

Tarefa

Deslize para começar a programar

Escreva uma função chamada compute_square que recebe um único inteiro e uma lista results como argumentos, calcula o quadrado do inteiro e adiciona o resultado à lista results.

Em seguida, utilizando a classe multiprocessing.Process, crie um processo separado para cada número na lista numbers para calcular seu quadrado em paralelo. Colete os resultados de todos os processos e armazene-os na variável results.

  • Implemente a função compute_square para receber dois argumentos: o inteiro a ser elevado ao quadrado e a lista results.
  • Em compute_square, calcule o quadrado do inteiro e adicione-o à lista results.
  • Para cada número em numbers, crie um Process com destino à função compute_square, passando o número e results como argumentos.
  • Inicie todos os processos e, em seguida, utilize join para garantir que todos os cálculos sejam concluídos antes de verificar os results.
  • Armazene todos os quadrados calculados na lista de resultados.

Solução

Switch to desktopMude para o desktop para praticar no mundo realContinue de onde você está usando uma das opções abaixo
Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 3. Capítulo 5
single

single

Pergunte à IA

expand

Pergunte à IA

ChatGPT

Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo

some-alt