"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 lidar com interrupções de teclado em pools de multiprocessamento Python?

Como lidar com interrupções de teclado em pools de multiprocessamento Python?

Publicado em 2024-11-08
Navegar:318

How to Gracefully Handle Keyboard Interrupts in Python Multiprocessing Pools?

Tratamento elegante de interrupções de teclado em pools de multiprocessamento Python

Ao trabalhar com o pool de multiprocessamento do Python, o manuseio de eventos KeyboardInterrupt nem sempre é simples. Neste artigo, exploraremos como lidar com essas interrupções e garantir que os processos sejam encerrados normalmente.

O exemplo de código fornecido demonstra o desafio. Apesar de ter um bloco catch para KeyboardInterrupt, ele não é executado quando control-C é pressionado. Em vez disso, o programa trava até ser encerrado externamente.

A raiz desse problema está em um bug do Python relacionado ao bloqueio de uma condição em threading.Condition.wait(). Neste contexto, KeyboardInterrupt nunca é enviado. Como resultado, evita que a interrupção seja tratada dentro do Pool.

Uma solução para esse problema é especificar um tempo limite ao aguardar os resultados. O método map_async() com um parâmetro timeout pode ser usado em vez de map(). Essa abordagem permite que KeyboardInterrupt seja reconhecido e processado:

results = pool.map_async(slowly_square, range(40)).get(9999999)

Definindo um grande valor de tempo limite , basicamente dizemos ao Pool para continuar aguardando os resultados até ser interrompido pelo usuário.

É importante observar que existem algumas limitações para esta solução alternativa. Se o tempo limite expirar antes de todas as tarefas serem concluídas, os resultados incompletos serão descartados. Portanto, é crucial escolher um valor de tempo limite apropriado que equilibre a capacidade de resposta com o risco de resultados incompletos.

Declaração de lançamento Este artigo foi reimpresso em: 1729576455 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