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 Функция без успеха.

После глубокого поиска я не нашел решения для этого. Итак, кто-нибудь знает способ остановить / убить рабов или есть идея, чтобы решить эту проблему?

Заранее спасибо!

0 ответов

Другие вопросы по тегам