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 = NoneView on GitHub (pinned to bc6749cc3b)
Solutions
- Call serve_forever() only once per Server instance; guard with a flag or store the returned task and await it instead.
- 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.