Асинхронная загрузка изображений из URL-адресов изображений в R - PullRequest
0 голосов
/ 05 июля 2019

Мне нужно загрузить тонну изображений за один месяц.

Я написал скрипт для загрузки небольшого текста JSON со скоростью около 200 в секунду на мою персональную машину;в конце концов, я буду запускать свой скрипт на сервере.(Я знаю, что загрузка изображений, к сожалению, будет намного медленнее.) Сценарий, показанный ниже, выполняет асинхронные вызовы параллельно, что примерно в три раза быстрее, чем эти вызовы асинхронно, но последовательно.

require(crul)
require(tidyverse)
require(tictoc)
require(furrr)

asyncCalls <- function(i) {
    urls_to_call = all_urls[i:min(i + 99, nrow(all_urls))]
    cc <- Async$new(urls = urls_to_call)  # ready the requests
    res <- cc$get()  # make the requests
    lapply(res, function(z) z$parse("utf-8"))  # parse the crul results
}

all_urls <- paste0("http://placehold.it/640x440&text=image", seq(1, 200))

plan(multiprocess)  # use multiple cores
tic()
metadata <- unlist(future_map(seq(0, floor(nrow(all_urls)/100))*100, ~ asyncCalls(.x)))
toc()

Какможно было бы ожидать, что при запуске этих URL-адресов изображений через asyncCalls() все элементы будут отображаться как NA.

. Как мне изменить скрипт, чтобы я мог быстро загружать изображения с этих URL-адресов?Я не могу найти функцию загрузки файла в crul, и я не уверен, как асинхронно использовать что-то вроде download.file().Спасибо!

...