2

我正在使用furrrR 运行并行计算。计算需要访问 Web API 并且需要进行身份验证。如果我运行并行进程,则每个进程都需要进行身份验证。在下面,我有 6 个进程。所以我需要先对这六个进程进行身份验证,然后再运行计算。我不知道如何使用furrr. 所以我最终在每次运行中都进行了身份验证,这确实是低效的。

下面是一个用于说明目的的简单示例。它不起作用,因为我无法共享该api.configure功能,但希望您能理解。

谢谢

library(tidyverse)
library(furrr)
plan(multiprocess, workers = 6)

testdf =  starwars %>%
  select(-films, -vehicles, -starships) %>%
  future_pmap_dfr(.f = function(...){
    api.configure(username = "username", password = "password")
    currentrow = tibble(...)
    l = tibble(name = currentrow$name, height = currentrow$height)
    return(l)
})
4

2 回答 2

0

尝试在地图之前打开连接:

library(tidyverse)
library(furrr)
plan(multiprocess, workers = 6)

future_options(globals = T) # this should be the default
api.configure(username = "username", password = "password")
ls(all=TRUE) #Check if new environment variables are available to save connexion

testdf =  starwars %>%
  select(-films, -vehicles, -starships) %>%
  future_pmap_dfr(.f = function(...){
    
    currentrow = tibble(...)
    l = tibble(name = currentrow$name, height = currentrow$height)
    return(l)
})
于 2020-09-29T09:39:11.873 回答
0

解决这个问题的方法是要求 API 的开发者在 API 包中添加变量来测试连接是否打开。这样future,如果连接未打开,我会在每个进程上进行一次身份验证,一旦完成,对该进程的所有后续 API 身份验证调用都将被 if 子句停止。

于 2021-02-04T11:47:41.003 回答