Проблема здесь в том, что R является однопоточным, и, следовательно, веб-сервер httpuv (на котором основан однопользовательский сервер opencpu) может одновременно обслуживать только один запрос.В вашем примере вы создали блокировку сетки.
В вашем примере выполняется запрос к функции, которая затем отправляет второй запрос на тот же веб-сервер , используя download.file()
.Этот второй запрос помещается в очередь httpuv для обслуживания после завершения первого, но, очевидно, этого не происходит, потому что download.file()
просто ждет, пока не истечет время ожидания.
Это не происходит на облачном сервере, потому что apache2является многопоточным.
Чтобы заставить его работать с однопользовательским сервером, вы можете заставить первую функцию сохранить данные как объект в рабочей области, а затем вторая функция сможет получить к ним доступ через ключ сеанса.Или же вы можете сохранить его на диске или в базе данных или что-то еще, где вторая функция может получить к нему доступ.Все, что не требует второго http-соединения с тем же локальным сервером.