classification
Title: @asynccontextmanager doesn't work well with async generators
Type: behavior Stage: resolved
Components: Interpreter Core Versions: Python 3.8, Python 3.7, Python 3.6
process
Status: closed Resolution: fixed
Dependencies: Superseder:
Assigned To: Nosy List: Valentin Lavrinenko, asvetlov, ncoghlan, ned.deily, yselivanov
Priority: release blocker Keywords: patch

Created on 2018-06-06 17:24 by Valentin Lavrinenko, last changed 2018-06-08 03:42 by yselivanov. This issue is now closed.

Pull Requests
URL Status Linked Edit
PR 7467 merged yselivanov, 2018-06-07 03:26
PR 7506 closed miss-islington, 2018-06-08 00:31
PR 7507 merged yselivanov, 2018-06-08 00:36
PR 7514 merged yselivanov, 2018-06-08 02:36
Messages (7)
msg318853 - (view) Author: Valentin Lavrinenko (Valentin Lavrinenko) Date: 2018-06-06 17:24
```
@asynccontextmanager
async def ctx():
    yield


async def gen():
    async with ctx():
        yield 'hello'
        yield 'world'


async def main():
    async with ctx():
        async for value in gen():
            print(value)
            raise RuntimeError()
```

Running main() leads to `RuntimeError: generator didn't stop after throw()`. This happens because async gernerator's `.athrow()` method doesn't re-throw `GeneratorExit` exception; probably, this is wrong.
msg318854 - (view) Author: Valentin Lavrinenko (Valentin Lavrinenko) Date: 2018-06-06 17:27
Sorry, `async with ctx()` in main() is not needed.
msg318882 - (view) Author: Yury Selivanov (yselivanov) * (Python committer) Date: 2018-06-07 03:26
Would be nice to fix this in 3.7.0
msg318967 - (view) Author: Ned Deily (ned.deily) * (Python committer) Date: 2018-06-07 19:42
> Would be nice to fix this in 3.7.0

Please do!
msg318998 - (view) Author: Yury Selivanov (yselivanov) * (Python committer) Date: 2018-06-08 00:31
New changeset 52698c7ad9eae9feb35839fde17a7d1da8036a9b by Yury Selivanov in branch 'master':
bpo-33786: Fix asynchronous generators to handle GeneratorExit in athrow() (GH-7467)
https://github.com/python/cpython/commit/52698c7ad9eae9feb35839fde17a7d1da8036a9b
msg319005 - (view) Author: Yury Selivanov (yselivanov) * (Python committer) Date: 2018-06-08 01:32
New changeset 8de73d5a6914cfe55c23b0ad829cd2ba8954bc2e by Yury Selivanov in branch '3.6':
bpo-33786: Fix asynchronous generators to handle GeneratorExit in athrow() (GH-7467) (GH-7507)
https://github.com/python/cpython/commit/8de73d5a6914cfe55c23b0ad829cd2ba8954bc2e
msg319012 - (view) Author: Yury Selivanov (yselivanov) * (Python committer) Date: 2018-06-08 03:42
New changeset b0bb9a81f60ed248a44b4c8008c0549c3e9e741d by Yury Selivanov in branch '3.6':
bpo-33786: Fix asynchronous generators to handle GeneratorExit in athrow() (GH-7467) (#7514)
https://github.com/python/cpython/commit/b0bb9a81f60ed248a44b4c8008c0549c3e9e741d
History
Date User Action Args
2018-06-08 03:42:50yselivanovsetstatus: open -> closed
resolution: fixed
stage: patch review -> resolved
2018-06-08 03:42:23yselivanovsetmessages: + msg319012
2018-06-08 02:36:09yselivanovsetpull_requests: + pull_request7140
2018-06-08 01:32:46yselivanovsetmessages: + msg319005
2018-06-08 00:36:26yselivanovsetpull_requests: + pull_request7135
2018-06-08 00:31:35miss-islingtonsetpull_requests: + pull_request7134
2018-06-08 00:31:29yselivanovsetmessages: + msg318998
2018-06-07 19:42:33ned.deilysetmessages: + msg318967
2018-06-07 03:26:56yselivanovsetpriority: normal -> release blocker

type: behavior
components: + Interpreter Core, - asyncio
versions: + Python 3.6, Python 3.8
nosy: + ned.deily

messages: + msg318882
2018-06-07 03:26:17yselivanovsetkeywords: + patch
stage: patch review
pull_requests: + pull_request7089
2018-06-06 18:16:25serhiy.storchakasetnosy: + ncoghlan
2018-06-06 17:27:13Valentin Lavrinenkosetmessages: + msg318854
2018-06-06 17:24:35Valentin Lavrinenkocreate