Я пытаюсь запустить встроенный API-интерфейс Plumber для получения ввода, и после получения правильного ввода и выполнения заданного условия вход возвращается в globalenv, и API закрывается, так что сценарий может продолжать бежать.
Я указал условие в конечной точке @get, которое вызывает quit (), stop () и т. Д., Но ни одно из них не привело к успешному завершению работы API.
Я пытался запустить API параллельно, используя в будущем, чтобы родительский скрипт мог закрыть API-интерфейс Plumber.
Похоже, что на самом деле в объекте класса Plumber API нет метода для закрытия API-интерфейса Plumber, и API не может быть закрыт изнутри.
Я изучил расширенную документацию, SO и Github Issues в поисках решения. Единственное предложенное частично релевантное решение - использовать R.Utils :: withTimeout для создания ограниченного по времени тайм-аута. Однако этот метод также не может закрыть API.
Простой вариант использования:
Основной сценарий:
library(plumber)
code_api <- plumber::plumb("code.R")
code_api$run(port = 8000)
code.R
#' @get /<code>
function(code) {
print(code)
if (nchar(code) == 3) {
assign("code",code,envir = globalenv())
quit()}
return(code)
}
#' @get /exit
function(exit){
stop()
}
Входные данные успешно возвращены в глобальную среду, но API не завершает работу ни после этого, ни после вызова конечной точки / exit.
Есть идеи, как этого добиться?