В основном у меня много задач (партиями около 1000), и время выполнения этих задач может варьироваться в широких пределах (от менее секунды до 10 минут). Я знаю, что если задача выполняется более минуты, я могу ее убить. Эти задачи являются шагами по оптимизации некоторой модели интеллектуального анализа данных (но не зависят друг от друга) и проводят большую часть времени внутри какой-либо функции расширения C, поэтому они не будут сотрудничать, если я попытаюсь убить их изящно.
Существует ли распределенная очередь задач, которая вписывается в эту схему? AFAIK: celery позволяет прерывать задачи, которые готовы к сотрудничеству. Но я могу ошибаться.
Я недавно задал похожий вопрос об уничтожении зависающих функций в чистом Python Убить зависающую функцию в Python в многопоточной среде .
Полагаю, я мог бы создать подкласс задачи сельдерея, чтобы он порождал новый процесс и затем выполнял свою полезную нагрузку, прерывая его выполнение, если это занимает много времени, но тогда я был бы убит накладными расходами при инициализации нового интерпретатора.