R furrr:在 运行 计算之前对每个未来进程验证 API

R furrr: authenticate an API on each future process before running the computation

我正在 运行使用 R 中的 furrr 进行并行计算。计算需要访问网络 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)
})

尝试打开地图前的连接:

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)
})

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