Paralelização e conexões (furrr/future)

Boa noite pessoal,

Estou criando um pacote que tem uma função que ele compara par a par um conjunto de sequências e me da um valor do score com base na similaridade delas. Por trabalhar com datasets grandes de sequência (mais de 100) que geram inúmeras combinações eu precisei paralelizar esse processo de forma a reduzir o tempo de execução da função.

Estou usando o seguinte código para paralelizar:

future::plan(future::multisession(), workers = 4)
res ← combinations %>%
furrr::future_pmap(
~calc_similarity(seq1 = .x, seq2 = .y, alignment_method = alignment_method, substitutionMatrix = BLOSUM62)

Ao utilizar esses comandos, ao checar meu pacote, dá erro e acusa que conexões ficaram abertas.

Pesquisando, vi a possibilidade de adicionar o comando closeAllConnections(). Esse comando funcionou e meu pacote passou no devtools::check().

Entretanto, quando executo o devtools::build_readme(), dá erro e não consigo gerar o readme:

Error:
! in callr subprocess.
Caused by error:
! invalid connection… Please make sure not to call closeAllConnections().
:information_source: See $stdout for standard output.

Confesso que não entendo muito sobre paralelização e conexões. Alguém já lidou com isso e sabe como eu poderia contornar esse problema? Ou tem alguma outra sugestão em que eu consiga otimizar o tempo de execução da função?

Agradeço desde já.

Eu recomendo a leitura desse artigo na documentção do future:

Essencialmente, a ideia é que a sua função não deve mudar a estratégia de execução da future. Isso deve ser responsabilidade do usuário. Lá também tem outras dicas para quem ta implementando um pacote que usa as futures.

Não sei se isso responde exatamente a sua pergunta. Acho que pra entender melhor, precisaria saber o erro que aprece quando as conexões ficam abertas e onde do seu código vc colocou o closeAllConnections().

1 curtida