2014-10-06 1 views
11

Я пробовал много вариантов как в Mac, так и в Ubuntu. Я прочитал документацию RserveКак я могу изящно закрыть Rserve?

http://rforge.net/Rserve/doc.html 

и что для пакетов Rserve и RSclient:

http://cran.r-project.org/web/packages/RSclient/RSclient.pdf

http://cran.r-project.org/web/packages/Rserve/Rserve.pdf

Я не могу понять, что правильный рабочий процесс для открытия/закрытия в Rserve и для закрытия Rserve «изящно».

Например, в Ubuntu я установил R из источника с ./config --enable-R-shlib (после документации Rserve), а также добавил строку «control enable» в /etc/Rserve.conf.

В терминале Ubuntu:

library(Rserve) 
library(RSclient) 
Rserve() 
c<-RS.connect() 
C## this is an Rserve QAP1 connection 

## Trying to shutdown the server 
RSshutdown(c) 
Error in writeBin(as.integer....): invalid connection 

RS.server.shutdown(c) 
Error in RS.server.shutdown(c): command failed with satus code 0x4e: no control line present (control commands disabled or server shutdown) 

Я могу, однако, закрыть соединение:

RS.close(c) 
>NULL 
C## Closed Rserve connection 

После закрытия соединения, я также попробовал варианты (также пытались с аргументом 'с' , даже если соединение закрыто):

RS.server.shutdown() 
RSshutdown() 

Итак, мои вопросы:

1- Как я могу закрыть Rserve изящно?

2- Может ли Rserve использоваться без RSclient?

Я также посмотрел на

How to Shutdown Rserve(), running in DEBUG

но вопрос относится к режиму отладки, а также нерешенным. (У меня недостаточно репутации, чтобы комментировать/спрашивать, работает ли shutdown в режиме без отладки).

Также посмотрел на:

how to connect to Rserve with an R client

Спасибо так много!

ответ

15

Загрузите пакеты Rserve и RSclient, затем подключитесь к экземплярам.

> library(Rserve) 
> library(RSclient) 

> Rserve(port = 6311, debug = FALSE) 
> Rserve(port = 6312, debug = TRUE) 

Starting Rserve... 
"C:\..\Rserve.exe" --RS-port 6311 
Starting Rserve... 
"C:\..\Rserve_d.exe" --RS-port 6312 

> rsc <- RSconnect(port = 6311) 
> rscd <- RSconnect(port = 6312) 

Похоже, они бегут ...

> system('tasklist /FI "IMAGENAME eq Rserve.exe"') 
> system('tasklist /FI "IMAGENAME eq Rserve_d.exe"') 

Image Name      PID Session Name  Session# Mem Usage 
========================= ======== ================ =========== ============ 
Rserve.exe     8600 Console     1  39,312 K 
Rserve_d.exe     12652 Console     1  39,324 K 

Давайте Shut «Em Down.

> RSshutdown(rsc) 
> RSshutdown(rscd) 

И они ушли ...

> system('tasklist /FI "IMAGENAME eq Rserve.exe"') 
> system('tasklist /FI "IMAGENAME eq Rserve_d.exe"') 

INFO: No tasks are running which match the specified criteria. 

Rserve могут быть использованы без RSclient, начав его с арг и/или скрипт конфигурации. Затем вы можете подключиться к нему из какой-либо другой программы (например, Tableau) или с помощью собственного кода.RSclient обеспечивает способ передачи команд/данные в Rserve из экземпляра Р.

Надеется, что это помогает :)

+0

Спасибо! Итак, если я правильно понимаю, чтобы связать R-процесс с экземпляром Rserve, я должен использовать RSclient, правильно? Мне также нужно было указать команду «args» в Rserve (в противном случае я получаю фатальную ошибку), а при использовании debug = TRUE командная строка продолжает ждать, и она заканчивается на «Ошибка: невозможно установить соединение с сеансом R». Таким образом, используя mac, работает только опция debug = F, и я использовал систему («ps aux | grep Rserve») [это открывает 2 соединения с двумя разными идентификаторами ..]. Огромное спасибо!! – user3570398

+0

Это отлично подходит для Rserve (порт = 6311, debug = FALSE, args = "- no-save"). Спасибо! – user3570398

4

В системе Windows, если вы хотите, чтобы закрыть RServe экземпляр, вы можете использовать функцию system в R, чтобы закрыть его. Например, в R:

library(Rserve) 
Rserve() # run without any arguments or ports specified 
system('tasklist /FI "IMAGENAME eq Rserve.exe"') # run this to see RServe instances and their PIDs 
system('TASKKILL /PID {yourPID} /F') # run this to kill off the RServe instance with your selected PID 

Если вы закрыли свой экземпляр RServe с этим PID правильно, то появится следующее сообщение:

SUCCESS: The process with PID xxxx has been terminated.

Вы можете проверить экземпляр RServe был закрыт путем ввода

system('tasklist /FI "IMAGENAME eq Rserve.exe"')

снова. Если нет RServe экземпляров работает больше, вы получаете сообщение

INFO: No tasks are running which match the specified criteria.

Более помощь и информацию по этой теме можно увидеть в this related question.

Обратите внимание, что подход «RSClient», упомянутый в более раннем ответе, является более аккуратным и легким, чем этот, но я все равно выдвинул его для тех, кто начинает RServe, не зная, как его остановить.

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

  • Нет связанных вопросов^_^