@@ -17,26 +17,27 @@ nbrOfWorkers <- function(evaluator = NULL) {
1717
1818
1919# ' @export
20- nbrOfWorkers.cluster <- function (evaluator ) {
21- assert_no_positional_args_but_first()
22-
23- expr <- formals(evaluator )$ workers
24- workers <- eval(expr , enclos = baseenv())
25- if (is.function(workers )) workers <- workers()
26- if (is.character(workers )) {
27- stop_if_not(! anyNA(workers ))
28- workers <- length(workers )
29- } else if (is.numeric(workers )) {
30- } else if (inherits(workers , " cluster" )) {
31- workers <- length(workers )
32- } else {
33- stopf(" Unsupported type of 'workers' for evaluator of class %s: %s" , commaq(class(evaluator )), class(workers )[1 ])
34- }
20+ nbrOfWorkers.ClusterFutureBackend <- function (evaluator ) {
21+ backend <- evaluator
22+ workers <- backend [[" workers" ]]
23+ stop_if_not(length(workers ) > 0L , inherits(workers , " cluster" ))
24+ workers <- length(workers )
3525 stop_if_not(length(workers ) == 1L , ! is.na(workers ), workers > = 1L , is.finite(workers ))
36-
3726 workers
3827}
3928
29+ # ' @export
30+ nbrOfWorkers.SequentialFutureBackend <- function (evaluator ) {
31+ 1L
32+ }
33+
34+ # ' @export
35+ nbrOfWorkers.cluster <- function (evaluator ) {
36+ assert_no_positional_args_but_first()
37+ backend <- makeFutureBackend(evaluator )
38+ nbrOfWorkers(backend )
39+ }
40+
4041# ' @export
4142nbrOfWorkers.uniprocess <- function (evaluator ) {
4243 assert_no_positional_args_but_first()
@@ -106,22 +107,14 @@ nbrOfFreeWorkers <- function(evaluator = NULL, background = FALSE, ...) {
106107
107108
108109# ' @export
109- nbrOfFreeWorkers.cluster <- function (evaluator , background = FALSE , ... ) {
110- assert_no_positional_args_but_first()
111-
112- workers <- nbrOfWorkers( evaluator )
113-
114- # # Create a dummy, lazy future based on the future strategy ("evaluator")
115- f <- evaluator( NULL , lazy = TRUE )
110+ nbrOfFreeWorkers.ClusterFutureBackend <- function (evaluator , ... ) {
111+ backend <- evaluator
112+ workers <- backend [[ " workers " ]]
113+ stop_if_not(length( workers ) > 0L , inherits( workers , " cluster " ) )
114+ workers <- length( workers )
115+ reg <- backend $ reg
116+ stop_if_not(length( reg ) == 1L , is.character( reg ), nzchar( reg ) )
116117
117- # # Special case
118- if (inherits(f , " SequentialFuture" )) {
119- return (if (isTRUE(background )) 0L else 1L )
120- }
121-
122- name <- attr(f $ workers , " name" , exact = TRUE )
123- stop_if_not(is.character(name ), length(name ) == 1L )
124- reg <- sprintf(" workers-%s" , name )
125118 # # Number of unresolved cluster futures
126119 usedNodes <- length(FutureRegistry(reg , action = " list" , earlySignal = FALSE ))
127120
@@ -131,6 +124,20 @@ nbrOfFreeWorkers.cluster <- function(evaluator, background = FALSE, ...) {
131124 workers
132125}
133126
127+ # ' @export
128+ nbrOfFreeWorkers.SequentialFutureBackend <- function (evaluator , background = FALSE , ... ) {
129+ assert_no_positional_args_but_first()
130+ if (isTRUE(background )) 0L else 1L
131+ }
132+
133+
134+ # ' @export
135+ nbrOfFreeWorkers.cluster <- function (evaluator , background = FALSE , ... ) {
136+ assert_no_positional_args_but_first()
137+ backend <- makeFutureBackend(evaluator )
138+ nbrOfFreeWorkers(backend , background = background , ... )
139+ }
140+
134141
135142# ' @export
136143nbrOfFreeWorkers.uniprocess <- function (evaluator , background = FALSE , ... ) {
0 commit comments