В кластере IPython как я могу изящно прервать работника

#ipython #ipython-parallel

#ipython #ipython-параллельный

Вопрос:

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

Мой сценарий заключается в том, что я хочу исследовать, как различные классификаторы машинного обучения и гиперпараметры влияют на время выполнения .fit() . Если время занимает слишком много времени, я просто хочу отказаться от задачи и перейти к следующей.

Я могу найти идентификаторы рабочих, и я могу использовать kill() их для отправки сигнала от клиента, но отправка SIGINT, SIGHUP и SIGABRT, похоже, безжалостно убивает работника, а не просто прерывает его. Я не могу поместить какую-либо логику в рабочий код, потому что это атомарный вызов .fit() , который я хочу засечь и прервать.

Комментарии:

1. Вы используете Windows? Отправка SIGINT в движок должна вызвать KeyboardInterrupt во время выполнения на платформах, отличных от Windows. Однако он может выйти из движка, если он фактически простаивает, а не занят работой над задачей.

2. Это в Linux. В контексте (безголового) рабочего процесса я предполагаю, что SIGINT не захвачен (что приводит к KeyboardInterrupt), а вместо этого приводит к завершению.

3. SIGINT по умолчанию заблокирован в Python и приводит к KeyboardInterrupt в пользовательском коде, если выполняется пользовательский код. Это остановит движок, если пользовательский код не запущен. Эта записная книжка демонстрирует прерывание работы движка. Если .fit() прерывается, это сработает.

4. Спасибо за код. Вдохновленный этим, и в одном экземпляре IPython я нажал Ctrl-C во время вызова .fit() , и весь процесс IPython прекратился. Кажется, .fit() не прерывается

5. Это было в Windows. В Linux (моя цель) нет жестокой смерти, но .fit() она отказывается прерываться и просто продолжает обработку до ее завершения, а затем возникает KeyboardInterrupt исключение. Конечный результат тот же; .fit() кажется, он не прерывается