-
-
Notifications
You must be signed in to change notification settings - Fork 30.5k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
3.11.5 regression: StreamWriter.__del__ fails if event loop is already closed #109538
Comments
Same problem here |
I have the same problem with 3.11.6. Thanks for reporting it. |
Is there a workaround? |
Use gc.collect() may help Here is my workaround. @pytest.fixture
def event_loop():
policy = asyncio.get_event_loop_policy()
loop = policy.new_event_loop()
loop.set_debug(True)
yield loop
gc.collect()
loop.close() |
@dpr-0 Thanks, but just adding that to my program didn't prevent the messages. |
Hope you can find the problem T^T |
Same problem for python 3.12.0 |
Sorry for the inconvenience. Can you (or anyone else reading this) submit a PR for the main branch? We will then backport the PR to 3.12 and 3.11. |
What is the desired behaviour if the event loop is already closed when the StreamWriter is destroyed? Should |
What you expected -- I presume it'd still issue the resource warning, just not the "loop is closed" message. |
@gvanrossum I would imagine like this def __del__(self, warnings=warnings):
if not self._transport.is_closing():
try:
self.close()
except RuntimeError:
warnings.warn(f"loop is closed", ResourceWarning)
else:
warnings.warn(f"unclosed {self!r}", ResourceWarning) If this one ok, I can submit a PR for this issues |
Sure, let’s give that a try as a PR. Maybe separately it would be nice to gc.collect() in loop.close(). That’s a larger discussion though. |
…d loop (#111983) Issue a ResourceWarning instead. Co-authored-by: Hugo van Kemenade <hugovk@users.noreply.github.com>
… closed loop (python#111983) Issue a ResourceWarning instead. Co-authored-by: Hugo van Kemenade <hugovk@users.noreply.github.com> (cherry picked from commit e0f5127)
…ed with closed loop (pythonGH-111983) Issue a ResourceWarning instead. (cherry picked from commit e0f5127) pythongh-109538: Avoid RuntimeError when StreamWriter is deleted with closed loop (python#111983) Issue a ResourceWarning instead. Co-authored-by: Hugo van Kemenade <hugovk@users.noreply.github.com> (cherry picked from commit e0f5127)
…H-111983) (#112142) * [3.12] gh-109538: Avoid RuntimeError when StreamWriter is deleted with closed loop (GH-111983) Issue a ResourceWarning instead. (cherry picked from commit e0f5127) gh-109538: Avoid RuntimeError when StreamWriter is deleted with closed loop (#111983) Issue a ResourceWarning instead. Co-authored-by: Hugo van Kemenade <hugovk@users.noreply.github.com> (cherry picked from commit e0f5127) * Fix missing warnings import
Did anyone find a solution? |
It's fixed in the main, 3.12 and 3.11 branches. It will be fixed in the next official releases of 3.11 and 3.12 from python.org (within 1-2 months). |
There is a Python bug with .wait_closed(); just remove this invocation. * python/cpython#104344 * python/cpython#109538
There is a Python bug with .wait_closed(); just remove this invocation. * python/cpython#104344 * python/cpython#109538
Edit: nevermind, I used 3.11.6 by accident. All good |
… closed loop (python#111983) Issue a ResourceWarning instead. Co-authored-by: Hugo van Kemenade <hugovk@users.noreply.github.com>
Just so you know, on python 3.11.9 with this setting for
the suite still raises an error from ignored warning:
Is it expected? Should I add those warnings as ignored to my |
@mdczaplicki That error might be due to pytest -- I cannot tell from the output you're posting. If you really think this is still not fixed in CPython 3.11.9, can you open a new issue with complete instructions for reproducing the problem? (Ideally also testing in 3.12.) |
… closed loop (python#111983) Issue a ResourceWarning instead. Co-authored-by: Hugo van Kemenade <hugovk@users.noreply.github.com>
Bug report
Bug description:
PR #107650 added a
StreamWriter.__del__
that emits a ResourceWarning if a StreamWriter is not closed by the time it is garbage collected, and it has been backported as 3.11.5. However, if the event loop has already been closed by the time this happens, it causes a RuntimeError message to be displayed. It's non-fatal because exceptions raised by__del__
are ignored, but it causes an error message to be displayed to the user (as opposed to ResourceWarning, which is only shown when one opts in).Code like the following used to run without any visible error, but now prints a traceback (and does not report the ResourceWarning for the unclosed StreamWriter when run with
-X dev
):Output in 3.11.5:
CPython versions tested on:
3.11
Operating systems tested on:
Linux
Linked PRs
The text was updated successfully, but these errors were encountered: