"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como compartilhar um bloqueio entre processos em Python usando multiprocessamento

Como compartilhar um bloqueio entre processos em Python usando multiprocessamento

Publicado em 2024-11-05
Navegar:649

How to Share a Lock Between Processes in Python Using Multiprocessing

Compartilhando um bloqueio entre processos em Python

Ao tentar usar pool.map() para direcionar uma função com vários parâmetros, incluindo um objeto Lock(), é crucial para resolver a questão do compartilhamento do bloqueio entre subprocessos. O multiprocessing.Lock() convencional não pode ser passado diretamente para métodos Pool devido a limitações de decapagem.

Opção 1: usando Manager e Manager.Lock()

Uma abordagem é utilizar Manager() e instancie um Manager.Lock(). Embora esse método seja confiável, ele envolve mais sobrecarga devido ao processo adicional que hospeda o servidor Manager. Além disso, as operações de bloqueio requerem comunicação com este servidor via IPC. o argumento da palavra-chave do inicializador. Isto garante que a instância de bloqueio seja global em todos os trabalhadores filhos. Este método elimina a necessidade de funções parciais e agiliza o processo.

Aqui está um exemplo usando a Opção 2:

def target(iterable_item): para item em itens: # Faça coisas legais if (... alguma condição aqui...): bloquear.acquire() # Grava em stdout ou arquivo de log, etc. bloqueio.release() def início(l): bloqueio global bloqueio = eu def principal(): iterável = [1, 2, 3, 4, 5] l = multiprocessamento.Lock() pool = multiprocessing.Pool(inicializador=init, initargs=(l,)) pool.map(alvo, iterável) piscina.fechar() piscina.join()

Declaração de lançamento Este artigo é reproduzido em: 1729132755 Se houver alguma violação, entre em contato com [email protected] para excluí -lo.
Tutorial mais recente Mais>

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