New submission from Dima Tisnek <[email protected]>:
Let's start with correct code:
import asyncio
async def writer():
await asyncio.sleep(1)
g1.set_result(41)
async def reader():
await g1
async def test():
global g1
g1 = asyncio.Future()
await asyncio.gather(reader(), writer())
asyncio.run(test())
No error, as expected.
Now let's mess it up a bit:
import asyncio
g1 = asyncio.Future()
async def writer():
await asyncio.sleep(1)
g1.set_result(41)
async def reader():
await g1
async def test():
await asyncio.gather(reader(), writer())
asyncio.run(test())
Fails with RuntimeError ... attached to a different loop
The error makes sense, although it's sad that I can't create global futures /
there was no even loop when Future was creates, it was not a *different* event
loop / maybe I wish .run() didn't force a new event loop?
A nit (IMO), but I can live with it.
Let's mess the code up a bit more:
import asyncio
g1 = asyncio.Future()
async def writer():
await asyncio.sleep(1)
g1.set_result(41)
async def reader():
await g1
async def test():
await asyncio.gather(reader(), reader(), writer())
asyncio.run(test())
RuntimeError: await wasn't used with future
What?
That's really confusing!
The only difference is that there are now 2 readers running in parallel.
The actual exception comes from asyncio.Future.__await__ after a yield.
I'm not sure how to fix this...
----------
components: asyncio
messages: 344798
nosy: Dima.Tisnek, asvetlov, yselivanov
priority: normal
severity: normal
status: open
title: Odd error awating a Future
versions: Python 3.7, Python 3.8
_______________________________________
Python tracker <[email protected]>
<https://bugs.python.org/issue37172>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe:
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com