R - сантехник, как добавить условие «остановить / выйти» на трассе? - PullRequest
0 голосов
/ 27 декабря 2018

У меня небольшой API, который мне нужно прекратить запускать, если достигнуто определенное время дня, например, в полночь, а затем перейти к остальной части программы.И это независимо от звонка из запроса.Поскольку можно включить функцию, которая прерывает процесс путем проверки Sy.time (), но она будет выполнена только при поступлении запроса.Я предполагаю, что мне нужно изменить какой-то атрибут $ run, но я не могу найти много об этом в Интернете.Я знаю, что можно получить pid и убить его с помощью системной команды, но я не знаю, обеспечивает ли это решение выполнение остальной части программы.

У кого-нибудь есть идея?

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

Файл, содержащий функцию, выглядит следующим образом: (my_file.R)

#* @param x My argument
#* @get /lag_lead 
function(x){
 x <- as.numeric(x)  
 c(x-1, x+1) 
}

и запущенный скрипт:

library(plumber)
mon_api <- plumb('my_file.R')
mon_api$run(port = 8000)
print('hello')

1 Ответ

0 голосов
/ 27 декабря 2018

Один из способов сделать это - установить тайм-аут с помощью withTimeout, который является оболочкой для setTimeLimit

library(R-utils)
withTimeout(mon_api$run(port = 8000), timeout = 30)
# timeout is in seconds

# calculate timeout, using difftime between now and midnight
tmo <- as.numeric(difftime(as.POSIXct("2018-12-28 00:00:00"), Sys.time(), units = "secs"))
withTimeout(mon_api$run(port = 8000), timeout = tmo)

Некоторые другие решения для тайм-аута, одно из которых использует parallel Timeиз команды R через что-то вроде try ()

...