python/cpython · error · RuntimeError

server {self!r} is already being awaited on serve_forever()

Error message

server {self!r} is already being awaited on serve_forever()

What it means

Error "server {self!r} is already being awaited on serve_forever()" thrown in python/cpython.

Source

Thrown at Lib/asyncio/base_events.py:374

            self._wakeup()

    def close_clients(self):
        for transport in self._clients.copy():
            transport.close()

    def abort_clients(self):
        for transport in self._clients.copy():
            transport.abort()

    async def start_serving(self):
        self._start_serving()
        # Skip one loop iteration so that all 'loop.add_reader'
        # go through.
        await tasks.sleep(0)

    async def serve_forever(self):
        if self._serving_forever_fut is not None:
            raise RuntimeError(
                f'server {self!r} is already being awaited on serve_forever()')
        if self._sockets is None:
            raise RuntimeError(f'server {self!r} is closed')

        self._start_serving()
        self._serving_forever_fut = self._loop.create_future()

        try:
            await self._serving_forever_fut
        except exceptions.CancelledError:
            try:
                self.close()
                self.close_clients()
                await self.wait_closed()
            finally:
                raise
        finally:
            self._serving_forever_fut = None

View on GitHub (pinned to bc6749cc3b)

Solutions

  1. Call serve_forever() only once per Server instance; guard with a flag or store the returned task and await it instead.
  2. If you only need the server to run, use 'async with server:' or serve_forever() once and cancel it during shutdown.

When it happens

Trigger: Raised when Server.serve_forever() is called on a server that is already serving.

Common situations: See trigger scenarios.


AI-assisted analysis of python/cpython@bc6749cc3b (2026-08-14). Data as JSON: /api/errors/4e6f5dd6c1c3b5bf. Report an issue: GitHub.