NEWS.md
resolved() for callr futures could throw a FutureError in some cases, e.g. a FutureInterruptError if the future was terminated abruptly.Now ‘callr’ futures can be canceled using cancel(), which also interrupts them by default, which in turn frees up compute resources sooner. Map-reduce API such as future.apply, doFuture, and furrr can take advantage of this by canceling all non-resolved futures whenever they detect an error in one of the futures. Also, canceled futures can be reset() and thereafter relaunched, possibly on another future backend.
A future that failed due to the ‘callr’ worker process was terminated is now considered interrupted, which for instance means that it can be reset().
Now ‘callr’ futures relay immediateCondition:s in near real-time, e.g. progression conditions signals by the progressr package.
run() for CallrFuture would update the RNG state, because callr::r_bg(), used to launch the future, does so. This would compromise numeric reproducibility, where the callr future backend would not give the same random numbers as other future backends. Now run() launches the future in stealth RNG mode, i.e. gives r_bg() a semi-random initial seed to work with (by removing .Random.seed) and then undo the RNG state at the very end.Now resolved() supports early signaling.
Now result() and value() gives a slightly more informative error message in case the callr process failed with a non-zero exit code.
nbrOfFreeWorkers().resolved() for CallrFuture will launch lazy futures [future (>= 1.15.0)].Argument workers of future strategies may now also be a function, which is called without argument when the future strategy is set up and used as is. For instance, plan(callr, workers = halfCores) where halfCores <- function() { max(1, round(availableCores() / 2)) } will use half of the number of available cores. This is useful when using nested future strategies with remote machines.
Gathering of results from background processes is made a little bit more robust against slow file systems by retrying a few times before accepting an error as an error.