python/cpython · error · RuntimeError
Cannot close a running event loop
Error message
Cannot close a running event loop
What it means
Error "Cannot close a running event loop" thrown in python/cpython.
Source
Thrown at Lib/asyncio/selector_events.py:102
ssl_protocol = sslproto.SSLProtocol(
self, protocol, sslcontext, waiter,
server_side, server_hostname,
ssl_handshake_timeout=ssl_handshake_timeout,
ssl_shutdown_timeout=ssl_shutdown_timeout,
)
_SelectorSocketTransport(self, rawsock, ssl_protocol,
extra=extra, server=server, context=context)
return ssl_protocol._app_transport
def _make_datagram_transport(self, sock, protocol,
address=None, waiter=None, extra=None):
self._ensure_fd_no_transport(sock)
return _SelectorDatagramTransport(self, sock, protocol,
address, waiter, extra)
def close(self):
if self.is_running():
raise RuntimeError("Cannot close a running event loop")
if self.is_closed():
return
self._close_self_pipe()
super().close()
if self._selector is not None:
self._selector.close()
self._selector = None
def _close_self_pipe(self):
self._remove_reader(self._ssock.fileno())
self._ssock.close()
self._ssock = None
self._csock.close()
self._csock = None
self._internal_fds -= 1
def _make_self_pipe(self):
# A self-socket, really. :-)View on GitHub (pinned to bc6749cc3b)
Solutions
- Stop the selector event loop before closing it; ensure run_forever()/run_until_complete() has returned first.
- Use asyncio.run() to handle stop and close automatically.
When it happens
Trigger: Raised when loop.close() is called on a running selector event loop.
Common situations: See trigger scenarios.
AI-assisted analysis of python/cpython@bc6749cc3b (2026-08-14).
Data as JSON: /api/errors/dac410a06c9f91d6.
Report an issue: GitHub.