{"record":{"id":"dac410a06c9f91d6","repo":"python/cpython","slug":"cannot-close-a-running-event-loop-dac410","errorCode":null,"errorMessage":"Cannot close a running event loop","messagePattern":"Cannot close a running event loop","errorType":"exception","errorClass":"RuntimeError","httpStatus":null,"severity":"error","filePath":"Lib/asyncio/selector_events.py","lineNumber":102,"sourceCode":"        ssl_protocol = sslproto.SSLProtocol(\n            self, protocol, sslcontext, waiter,\n            server_side, server_hostname,\n            ssl_handshake_timeout=ssl_handshake_timeout,\n            ssl_shutdown_timeout=ssl_shutdown_timeout,\n        )\n        _SelectorSocketTransport(self, rawsock, ssl_protocol,\n                                 extra=extra, server=server, context=context)\n        return ssl_protocol._app_transport\n\n    def _make_datagram_transport(self, sock, protocol,\n                                 address=None, waiter=None, extra=None):\n        self._ensure_fd_no_transport(sock)\n        return _SelectorDatagramTransport(self, sock, protocol,\n                                          address, waiter, extra)\n\n    def close(self):\n        if self.is_running():\n            raise RuntimeError(\"Cannot close a running event loop\")\n        if self.is_closed():\n            return\n        self._close_self_pipe()\n        super().close()\n        if self._selector is not None:\n            self._selector.close()\n            self._selector = None\n\n    def _close_self_pipe(self):\n        self._remove_reader(self._ssock.fileno())\n        self._ssock.close()\n        self._ssock = None\n        self._csock.close()\n        self._csock = None\n        self._internal_fds -= 1\n\n    def _make_self_pipe(self):\n        # A self-socket, really. :-)","sourceCodeStart":84,"sourceCodeEnd":120,"githubUrl":"https://github.com/python/cpython/blob/bc6749cc3b5ae4a5e88a6cc2d5b3bebbe354eae6/Lib/asyncio/selector_events.py#L84-L120","documentation":"Error \"Cannot close a running event loop\" thrown in python/cpython.","triggerScenarios":"Raised when loop.close() is called on a running selector event loop.","commonSituations":"See trigger scenarios.","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."],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"bc6749cc3b5ae4a5e88a6cc2d5b3bebbe354eae6","analyzedAt":"2026-08-14T22:01:13.976Z","schemaVersion":2},"datasetVersion":"2026-08-15T17:31:12.345Z"}