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.
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