No multiprocessamento, compartilhar uma fila entre processos pai e filho é essencial para comunicação e recuperação de resultados. No entanto, usar apply_async para iniciar processos de trabalho assíncronos apresenta desafios no compartilhamento de filas.
Para superar o erro "Os objetos da fila só devem ser compartilhados entre processos por meio de herança", podemos utilizar multiprocessing.Manager. Esta classe de gerenciador permite a criação e gerenciamento de recursos compartilhados, incluindo filas.
Ao incluir nossa criação de fila no contexto multiprocessing.Manager(), podemos torná-la acessível a todos os trabalhadores. Veja como modificar o código:
if __name__ == '__main__':
pool = multiprocessing.Pool(processes=3)
m = multiprocessing.Manager()
q = m.Queue()
workers = pool.apply_async(worker, (33, q))
Agora, cada trabalhador pode interagir com o objeto q compartilhado e relatar os resultados ao processo base. Essa abordagem permite uma comunicação de resultados eficiente e confiável, mantendo a natureza assíncrona de apply_async.
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