我刚刚遇到了R包furr和future。我很想用它们来编写灵活的代码,如果在运行Windows或OSX的机器上可以使用多个内核的话。我希望"可用"内核的默认#类似于parallel::detectCores()-1,
,而不是detectCores().
。似乎plan(multiprocess)
是实现这一点的简化、惯用方法,但它默认使用机器上的所有内核。我遇到了更明确的方法来指定"计划"。主要使用plan(multiprocess)
的默认行为,但同时将核心数量限制为比detectCores()
返回的内核数量少1的惯用方法是什么?
编辑根据@HernikB在上面的评论,我相信这个问题的合理答案应该是options(future.plan="multiprocess",mc.cores = parallel::detectCores() - 1L)
。
EDIT我发现这种方法经常不使用多进程计划(或者至少不与future_map_dfr
并行),而它似乎可以。相比之下,
nc<-detectCores()-1
plan(strategy=multiprocess, workers=nc)
似乎是并行的。留下未回答的问题。
看看?future::multiprocess
。你可以做:
plan(multiprocess(workers = 3))
如果你的计算机上有4个核心。r.