futureverse / futureverse/progressr

Re-allow creation of progressor in the global environment

Open
#99 0 comments 0 reactions 0 assignees View on GitHub
Dominant language
R
Stars
299
Forks
11
PR merge metrics
No merged PRs in 30d

Description

In ~~the develop branch~~ **progressr** (>= 0.7.0), the `progressor()` function must not be created in the global environment. This was necessary in order to be able to automatically inject an `on.exit()` call that terminates the progressor when exiting a function, `local()`, etc. This approach won't work in the global environment. Because of this, `progressor()` now produce an error if one attempts to call it from the global environment. This helps to protect against an incomplete/interrupted progressor from blocking all future progressors.

However, it might be possible to get around this too. First, I think this is only a problem when the global progress handler is enabled. So, if there is an active progressor in the global environment and we try to create another `progressor()` _from the global environment_, then we know that the previous one is no longer of interest and we could terminate that one before creating the new one, e.g.

```r
p1 <- progressor(3)
p1() # incomplete
p1() # still incomplete

p2 <- progressor(4) # here can terminate p1()
```

EDIT 2021-02-28: The above is now is implemented for the next release (0.8.0).

This leaves the case where we try to use progress updates from another function, e.g.

```r
p1 <- progressor(3)
p1() # incomplete
p1() # still incomplete

slow_sum(1:3)
```

In this case, the progressor created inside `slow_sum()` is not created in the global environment. How can we make sure it is ok to terminate `p1()` in this case? Can we distinguish this case from:

```r
p1 <- progressor(3)
for (kk in 1:2) {
p1()
slow_sum(1:3)
}
p1() # complete here
```
?

I think the answer is: we can't.

I'll leave this issue open for a while to fully digest this idea. Maybe something else will come to me/us

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.