2013-10-04 2 views
1

Я запускаю многопоточный скрипт R, но у меня возникают проблемы с генерацией вывода из кластера.Захват вывода из новых потоков в R

outFun <- function() 
{ 
    cat(sample(0:9,1)); 
} 
require(snow) 
clust <- makeCluster(4) 
clusterExport(clust,"outFun") 
clustFun <- function(i){outFun()} 
clusterApplyLB(clust,1:8,clustFun) 

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

EDIT: This question отвечает на это для Linux-машины, но решение не работает для Windows. Обходной путь - просто использовать вывод файла, но мне любопытно, знает ли кто-нибудь решение, позволяющее фактически отправлять выходные данные в главный поток в Windows.

+2

R не является многопоточным. –

+0

@DWin, как я продемонстрировал в своем коде выше, есть пакеты, чтобы сделать его многопоточным ... – jpd527

ответ

2

Опция makeClusteroutfile="" не работает с Rgui на Windows, поскольку Rgui не отправляет выходные данные дочерних процессов в окно дисплея. Тем не менее, outfile="" делает работу с программой R радикала, потому что это простая консольная программа:

C:\Program Files\R\R-3.0.2\bin\i386> rterm -q 
> library(parallel) 
> clust <- makeCluster(4, outfile="") 
starting worker pid=1596 on localhost:11862 at 09:13:30.005 
starting worker pid=1192 on localhost:11862 at 09:13:30.342 
starting worker pid=1616 on localhost:11862 at 09:13:30.679 

«Стартовым рабочим» сообщения поступают из рабочих процессов, прежде чем они выполняют функцию slaveLoop. Вы также должны видеть результаты работы от выполнения заданий:

> clusterEvalQ(clust, message("hello")) 
hello 
hello 
hello 
hello 
[[1]] 
NULL 

[[2]] 
NULL 

[[3]] 
NULL 

[[4]] 
NULL 
+0

Интересное решение, не подумало бы, что проблема связана с IDE. – jpd527

Смежные вопросы