"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 bloqueios entre processos Python

Como compartilhar bloqueios entre processos Python

Publicado em 2024-11-08
Navegar:799

How to Share Locks Between Python Processes

Compartilhando bloqueios entre processos Python

Ao tentar usar um bloqueio entre vários processos, você pode encontrar o erro: "Os objetos bloqueados devem apenas ser compartilhado entre processos por meio de herança."

Para resolver isso, existem duas abordagens principais:

Usando um gerente

Essa abordagem envolve a criação de um Objeto Manager e passando um Manager.Lock():

from multiprocessing import Manager
...
m = Manager()
l = m.Lock()

Usar um Manager, no entanto, introduz a necessidade de um processo adicional para hospedar o servidor Manager e se comunicar através do IPC.

Passando o bloqueio no pool Criação

Um método alternativo é passar o multiprocessing.Lock() regular no momento da criação do Pool usando o argumento da palavra-chave do inicializador:

def init(l):
    global lock
    lock = l

l = multiprocessing.Lock()
pool = multiprocessing.Pool(initializer=init, initargs=(l,))

Este método torna a instância de bloqueio global em todos os trabalhadores filhos. Observe que essa abordagem elimina a necessidade da função parcial.

Ao empregar uma dessas técnicas, você pode compartilhar efetivamente bloqueios entre processos Python, permitindo acesso coordenado a recursos compartilhados.

Declaração de lançamento Este artigo é reproduzido em: 1729132333 Se houver alguma violação, entre em contato com [email protected] para excluir
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