[New-bugs-announce] [issue39116] StreamReader.readexactly() raises GeneratorExit on ProactorEventLoop
report at bugs.python.org
Sat Dec 21 11:04:36 EST 2019
New submission from twisteroid ambassador <twisteroid.ambassador at gmail.com>:
I have been getting these strange exception since Python 3.8 on my Windows 10 machine. The external symptoms are many errors like "RuntimeError: aclose(): asynchronous generator is already running" and "Task was destroyed but it is pending!".
By adding try..except..logging around my code, I found that my StreamReaders would raise GeneratorExit on readexactly(). Digging deeper, it seems like the following line in StreamReader._wait_for_data():
would raise a GeneratorExit.
There are only two other methods on StreamReader that actually does anything to _waiter, set_exception() and _wakeup_waiter(), but neither of these methods were called before GeneratorExit is raised. In fact, both these methods sets self._waiter to None, so normally after _wait_for_data() does "await self._waiter", self._waiter is None. However, after GeneratorExit is raised, I can see that self._waiter is not None. So it seems the GeneratorExit came from nowhere.
I have not been able to reproduce this behavior in other code. This is with Python 3.8.1 on latest Windows 10 1909, using ProactorEventLoop. I don't remember seeing this ever on Python 3.7.
nosy: asvetlov, twisteroid ambassador, yselivanov
title: StreamReader.readexactly() raises GeneratorExit on ProactorEventLoop
versions: Python 3.8
Python tracker <report at bugs.python.org>
More information about the New-bugs-announce