This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

classification
Title: Call asyncio Future in scope
Type: behavior Stage: resolved
Components: asyncio Versions: Python 3.6
process
Status: closed Resolution: not a bug
Dependencies: Superseder:
Assigned To: Nosy List: RobinFrcd, asvetlov, yselivanov
Priority: normal Keywords:

Created on 2019-07-03 15:53 by RobinFrcd, last changed 2022-04-11 14:59 by admin. This issue is now closed.

Files
File name Uploaded Description Edit
test_progress.py RobinFrcd, 2019-07-03 16:51
Messages (5)
msg347232 - (view) Author: Fourcade (RobinFrcd) Date: 2019-07-03 15:53
I'm trying to get the progession of my asyncIO Futures. For some reason, I can't get value updates inside any other scope.

For example:

```
import concurrent.futures
import time
import asyncio
import random

def get_progress(futures):
    return sum([f.done() for f in futures])

def long_task(t):
    time.sleep(1.5)
    return t

loop = asyncio.get_event_loop()
executor = concurrent.futures.ProcessPoolExecutor(max_workers=4)
inputs = ['a', 'b', 'c', 'd', 'e', 'f', 'g']
futures_ = [loop.run_in_executor(executor, long_task, i) for i in inputs]

for i in range(5):
    time.sleep(1)
    print(get_progress(futures_))
```

It prints only 0. However, if I run this inside a terminal and call get_progress(futures_) it prints 7 as expected.

Am I missing something here ?
msg347233 - (view) Author: Andrew Svetlov (asvetlov) * (Python committer) Date: 2019-07-03 16:03
Your code doesn't run the event loop, only creates it.
What do you expect?
msg347234 - (view) Author: Fourcade (RobinFrcd) Date: 2019-07-03 16:47
If I add a simple print inside long_task, the print is executed correctly. So it seems this code actually runs the loop. 

(I'm on python 3.6.8).
msg347235 - (view) Author: Fourcade (RobinFrcd) Date: 2019-07-03 16:51
Here's the file with an example. The get_progress function always outputs 0.
msg347237 - (view) Author: Andrew Svetlov (asvetlov) * (Python committer) Date: 2019-07-03 18:44
It doesn't.
Loop is executed by asyncio.run() (recommended) or low-level loop.run_until_complete() / loop.run_forever() calls.

Please note, this tracker is for working on Python itself, not for teaching Python usage.
Please use other resources like forums or stack overflow.

I'm closing the issue as there is no bug here but improper usage example.
History
Date User Action Args
2022-04-11 14:59:17adminsetgithub: 81675
2019-07-03 18:44:01asvetlovsetstatus: open -> closed
resolution: not a bug
messages: + msg347237

stage: resolved
2019-07-03 16:51:40RobinFrcdsetfiles: + test_progress.py

messages: + msg347235
2019-07-03 16:47:30RobinFrcdsetmessages: + msg347234
2019-07-03 16:03:38asvetlovsetmessages: + msg347233
2019-07-03 15:53:59RobinFrcdcreate