Skip to content

Commit 400cca5

Browse files
print(<Future>): more information + correct total-size calculation for globals
1 parent 46d6581 commit 400cca5

File tree

2 files changed

+52
-41
lines changed

2 files changed

+52
-41
lines changed

DESCRIPTION

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
Package: future
2-
Version: 1.49.0-9017
2+
Version: 1.49.0-9018
33
Title: Unified Parallel and Distributed Processing in R for Everyone
44
Depends:
55
R (>= 3.2.0)

R/backend_api-Future-class.R

Lines changed: 51 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -280,39 +280,23 @@ print.Future <- function(x, ...) {
280280
cat("Label: ", label, "\n", sep = "")
281281
cat("Expression:\n")
282282
print(future[["expr"]])
283-
cat(sprintf("Lazy evaluation: %s\n", future[["lazy"]]))
284-
cat(sprintf("Asynchronous evaluation: %s\n", future[["asynchronous"]]))
285-
cat(sprintf("Local evaluation: %s\n", future[["local"]]))
286-
cat(sprintf("Environment: %s\n", envname(future[["envir"]])))
287-
cat(sprintf("Capture standard output: %s\n", future[["stdout"]]))
288-
conditions <- future[["conditions"]]
289-
if (length(conditions) > 0) {
290-
exclude <- attr(conditions, "exclude", exact = TRUE)
291-
if (length(exclude) == 0) exclude <- "<none>"
292-
immediateConditionClasses <- attr(conditions, "immediateConditionClasses", exact = TRUE)
293-
if (length(immediateConditionClasses) == 0) immediateConditionClasses <- "<none>"
294-
cat(sprintf("Capture condition classes: %s (excluding %s)\n",
295-
commaq(conditions),
296-
commaq(exclude)))
297-
cat(sprintf("Immediate condition classes: %s\n",
298-
commaq(immediateConditionClasses)))
299-
} else {
300-
cat("Capture condition classes: <none>\n")
301-
}
302283

303284
## FIXME: Add method globals_of() for Future such that it's possible
304285
## also for SequentialFuture to return something here. /HB 2017-05-17
305-
g <- future[["globals"]]
306-
ng <- length(g)
307-
if (ng > 0) {
308-
gSizes <- sapply(g, FUN = objectSize)
309-
gTotalSize <- sum(gSizes)
310-
g <- head(g, n = 5L)
311-
gSizes <- head(gSizes, n = 5L)
312-
g <- sprintf("%s %s of %s", sapply(g, FUN = function(future) class(future)[1]), sQuote(names(g)), sapply(gSizes, FUN = asIEC))
313-
if (ng > length(g)) g <- c(g, "...")
286+
gs <- future[["globals"]]
287+
ngs <- length(gs)
288+
if (ngs > 0) {
289+
gTotalSize <- objectSize(gs)
290+
gSizes <- sapply(gs, FUN = objectSize)
291+
o <- order(gSizes, decreasing = TRUE)
292+
o <- head(o, n = 5L)
293+
gSizes <- gSizes[o]
294+
gs <- gs[o]
295+
types <- vapply(gs, FUN.VALUE = NA_character_, FUN = function(g) class(g)[1])
296+
g <- sprintf("%s %s of %s", types, sQuote(names(gSizes)), sapply(gSizes, FUN = asIEC))
297+
if (ngs > length(gSizes)) g <- c(g, "...")
314298
g <- hpaste(g, maxHead = 5L, maxTail = 0L)
315-
cat(sprintf("Globals: %d objects totaling %s (%s)\n", ng, asIEC(gTotalSize), g))
299+
cat(sprintf("Globals: %d objects totaling %s (%s)\n", ngs, asIEC(gTotalSize), g))
316300
} else {
317301
cat("Globals: <none>\n")
318302
}
@@ -331,6 +315,28 @@ print.Future <- function(x, ...) {
331315
cat("L'Ecuyer-CMRG RNG seed: <none> (seed = ", deparse(future[["seed"]]), ")\n", sep = "")
332316
}
333317

318+
cat(sprintf("Capture standard output: %s\n", future[["stdout"]]))
319+
conditions <- future[["conditions"]]
320+
if (length(conditions) > 0) {
321+
exclude <- attr(conditions, "exclude", exact = TRUE)
322+
if (length(exclude) == 0) exclude <- "<none>"
323+
immediateConditionClasses <- attr(conditions, "immediateConditionClasses", exact = TRUE)
324+
if (length(immediateConditionClasses) == 0) immediateConditionClasses <- "<none>"
325+
cat(sprintf("Capture condition classes: %s (excluding %s)\n",
326+
commaq(conditions),
327+
commaq(exclude)))
328+
cat(sprintf("Immediate condition classes: %s\n",
329+
commaq(immediateConditionClasses)))
330+
} else {
331+
cat("Capture condition classes: <none>\n")
332+
}
333+
334+
cat(sprintf("Lazy evaluation: %s\n", future[["lazy"]]))
335+
cat(sprintf("Local evaluation: %s\n", future[["local"]]))
336+
cat(sprintf("Asynchronous evaluation: %s\n", future[["asynchronous"]]))
337+
cat(sprintf("Early signaling: %s\n", isTRUE(future[["earlySignal"]])))
338+
cat(sprintf("Environment: %s\n", envname(future[["envir"]])))
339+
334340
state <- future[["state"]]
335341
cat(sprintf("State: %s\n", commaq(state)))
336342

@@ -355,25 +361,30 @@ print.Future <- function(x, ...) {
355361
cat(sprintf("Resolved: %s\n", tryCatch(resolved(future, .signalEarly = FALSE), error = function(ex) NA)))
356362
}
357363

364+
cat(sprintf("Unique identifier: %s\n", paste(future[["uuid"]], collapse = "-")))
365+
cat(sprintf("Owner process: %s\n", future[["owner"]]))
366+
cat(sprintf("Class: %s\n", commaq(class)))
367+
358368
if (hasResult) {
359-
if (inherits(result, "FutureResult")) {
360-
value <- result[["value"]]
361-
} else {
369+
if (!inherits(result, "FutureResult")) {
362370
stop(FutureError(sprintf("The %s object does not have a 'results' field", class(future)[1]), future = future))
363371
}
372+
373+
value <- result[["value"]]
364374
cat(sprintf("Value: %s of class %s\n", asIEC(objectSize(value)), sQuote(class(value)[1])))
365-
if (inherits(result, "FutureResult")) {
366-
conditions <- result[["conditions"]]
367-
conditionClasses <- vapply(conditions, FUN = function(c) class(c[["condition"]])[1], FUN.VALUE = NA_character_)
368-
cat(sprintf("Conditions captured: [n=%d] %s\n", length(conditionClasses), hpaste(sQuote(conditionClasses))))
369-
}
375+
376+
conditions <- result[["conditions"]]
377+
conditionClasses <- vapply(conditions, FUN = function(c) class(c[["condition"]])[1], FUN.VALUE = NA_character_)
378+
cat(sprintf("Conditions captured: [n=%d] %s\n", length(conditionClasses), hpaste(sQuote(conditionClasses))))
379+
380+
t0 <- result[["started"]]
381+
t1 <- result[["finished"]]
382+
cat(sprintf("Duration: %s (started %s)\n", format(t1-t0), t0))
383+
cat(sprintf("Worker process: %s\n", result[["session_uuid"]]))
370384
} else {
371385
cat("Value: <not collected>\n")
372386
cat("Conditions captured: <none>\n")
373387
}
374-
cat(sprintf("Early signaling: %s\n", isTRUE(future[["earlySignal"]])))
375-
cat(sprintf("Owner process: %s\n", future[["owner"]]))
376-
cat(sprintf("Class: %s\n", commaq(class)))
377388
} ## print()
378389

379390

0 commit comments

Comments
 (0)