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.
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.
1234567891011121314151617181920from 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.
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_squarepara receber dois argumentos: o inteiro a ser elevado ao quadrado e a listaresults. - Em
compute_square, calcule o quadrado do inteiro e adicione-o à listaresults. - Para cada número em
numbers, crie umProcesscom destino à funçãocompute_square, passando o número eresultscomo 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
Obrigado pelo seu feedback!
single
Pergunte à IA
Pergunte à IA
Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo