R + снег + кластер: убить рабов, когда мастер умирает
Я распараллеливаю мой код R со снегом, используя кластеры (типа SOCK) в Ubuntu 16 LTS. Более простой пример кода ниже:
# Make cluster of type SOCK
cl <- makeCluster(hostsList, type = "SOCK")
clusterExport(cl, "task");
# Compute long time tasks
result <- clusterApplyLB(cl, 1:50, function(x) task(x))
# Stop cluster
stopCluster(cl)
Функция задачи может занимать много времени (минуты или часы), но когда по некоторым причинам в моем приложении нет необходимости продолжать вычисление задач, приложение не может остановить все подчиненные процессы. Я могу уничтожить основной процесс R, но подчиненные процессы R остаются до их завершения (то есть продолжают использовать ЦП в течение нескольких раз).
Я не могу убить подчиненные процессы, потому что их родительский процесс является системным (PPID = 1), поэтому я не знаю, какие подчиненные связаны с главным процессом, который я хочу остановить. Я также попытался использовать своего рода прерывание, чтобы позволить основному процессу R выполняться stopCluster
Функция без успеха.
После глубокого поиска я не нашел решения для этого. Итак, кто-нибудь знает способ остановить / убить рабов или есть идея, чтобы решить эту проблему?
Заранее спасибо!