Получить цикл должен быть быстрее (httr) в R - PullRequest
0 голосов
/ 18 января 2019

Мне нужно написать скрипт R, который в конце посылает огромное количество запросов на получение на сервер. Каждая строка моего фрейма данных содержит несколько сведений. В последнем столбце «url» создаются запросы http в каждой строке, например: https://logsxxx.xxx.com/xx.xx?.....

Может случиться так, что я должен отправить 300.000 - 1.000.000 запросов на получение сценария. Хорошо, что мой скрипт работает и запросы доходят до сервера. Плохо то, что цикл стоит много времени, пока все строки не будут отправлены. Для 300 000 строк требуется около 9 часов.

Я проверял, возможно ли это с помощью ifelse или apply, но у меня не получилось ...

system.time(
for (i in 1:300000){
    try(
      {
      GET(mydata$url[i], timeout(3600))
      print(paste("row",i,"sent at",Sys.time()))
      }
    , silent=FALSE)
}
)

Еще одна плохая вещь - скрипт может не отправлять 100%, если по какой-либо причине разрывается интернет-соединение. Тогда я вижу следующую ошибку:

[1] "row 18 sent at 2019-01-18 14:22:05"
[1] "row 19 sent at 2019-01-18 14:22:06"
[1] "row 20 sent at 2019-01-18 14:22:06"
[1] "row 21 sent at 2019-01-18 14:22:06"
Error in curl::curl_fetch_memory(url, handle = handle) : 
Timeout was reached: Connection timed out after 10000 milliseconds
[1] "row 23 sent at 2019-01-18 14:22:16"
[1] "row 24 sent at 2019-01-18 14:22:16"
[1] "row 25 sent at 2019-01-18 14:22:16"

По крайней мере, скрипт не ломается полностью и переходит к следующему ряду. Проблема здесь в том, что чем дольше происходит сбой подключения к Интернету, тем больше строк не будет отправлено.

Буду очень признателен, если:

  • кто-то может показать мне более быстрый способ отправки запросов - возможно, без вложенного цикла for
  • и покажите мне, как я могу сделать что-то подобное с кодом: «если запрос get не выполняется из-за подключения к Интернету, повторите попытку 3 раза, прежде чем переходить к следующему запросу get. Делайте это, пока все элементы i не будут отправлены»

С уважением,

...