«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как корректно обрабатывать прерывания клавиатуры в многопроцессорных пулах Python?

Как корректно обрабатывать прерывания клавиатуры в многопроцессорных пулах Python?

Опубликовано 8 ноября 2024 г.
Просматривать:882

How to Gracefully Handle Keyboard Interrupts in Python Multiprocessing Pools?

Надежная обработка прерываний клавиатуры в многопроцессорных пулах Python

При работе с многопроцессорным пулом Python обработка событий KeyboardInterrupt не всегда является простой задачей. В этой статье мы рассмотрим, как обрабатывать такие прерывания и обеспечивать корректное завершение процессов.

Приведенный пример кода демонстрирует проблему. Несмотря на наличие блока catch для KeyboardInterrupt, он не выполняется при нажатии Control-C. Вместо этого программа зависает до тех пор, пока не будет завершена извне.

Корень этой проблемы лежит в ошибке Python, связанной с блокировкой по условию в threading.Condition.wait(). В этом контексте KeyboardInterrupt никогда не отправляется. В результате это предотвращает обработку прерывания в пуле.

Одним из решений этой проблемы является указание тайм-аута при ожидании результатов. Вместо карты() можно использовать метод map_async() с параметром таймаута. Этот подход позволяет распознавать и обрабатывать KeyboardInterrupt:

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

Установив большое значение таймаута , мы, по сути, говорим Пулу продолжать ждать результатов, пока пользователь не прервет его.

Важно отметить, что есть некоторые ограничения для этого обходного пути. Если тайм-аут истечет до завершения всех задач, неполные результаты будут отброшены. Поэтому крайне важно выбрать подходящее значение тайм-аута, которое сбалансирует скорость реагирования с риском получения неполных результатов.

Заявление о выпуске Эта статья перепечатана по адресу: 1729576455. В случае каких-либо нарушений, пожалуйста, свяжитесь с [email protected], чтобы удалить ее.
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3