Como sincronizar o acesso a dicionários compartilhados em multiprocessamento
Em um ambiente de multiprocessamento, vários processos podem exigir acesso a dados compartilhados, como um dicionário. No entanto, se mecanismos de sincronização adequados não forem implementados, condições de corrida podem ocorrer, levando a dados não confiáveis ou corrompidos.
Considere um cenário em que vários processos filhos acessam um dicionário global D enquanto trabalham em uma fila compartilhada Q. Inicialmente, o dicionário parece armazenar os resultados modificados pelos processos filhos. No entanto, uma vez que o processo principal se junta a Q, o dicionário D fica vazio.
Esse problema decorre da natureza assíncrona do multiprocessamento. Cada processo filho tem seu próprio espaço de memória e as modificações feitas em variáveis compartilhadas podem não ser imediatamente visíveis para outros processos sem a sincronização adequada.
Usando um objeto gerenciador para sincronização
Uma solução comum para sincronizar o acesso a dados compartilhados em multiprocessamento é usar um objeto Manager. Um Gerenciador fornece segmentos de memória compartilhada que podem ser acessados por todos os processos participantes.
Veja como você pode implementar a sincronização usando um Gerenciador:
from multiprocessing import Process, Manager def f(d): d[1] = '1' d['2'] = 2 if __name__ == '__main__': manager = Manager() d = manager.dict() d[1] = '1' d['2'] = 2 p1 = Process(target=f, args=(d,)) p2 = Process(target=f, args=(d,)) p1.start() p2.start() p1.join() p2.join() print(d)
Neste exemplo, o objeto Manager cria um dicionário compartilhado d, que é acessível por ambos os processos filhos. Quando um processo filho modifica o dicionário, as alterações ficam imediatamente visíveis para outros processos.
Saída:
$ python mul.py {1: '111', '2': 6}
Esta saída demonstra que o dicionário compartilhado foi sincronizado e atualizado com sucesso pelos processos filhos.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3