diff --git a/fastapi/routing.py b/fastapi/routing.py index 49f1b6013..a78bfc0bc 100644 --- a/fastapi/routing.py +++ b/fastapi/routing.py @@ -20,6 +20,9 @@ from typing import ( Type, Union, ) +import anyio +from anyio import CapacityLimiter +import functools from fastapi import params from fastapi._compat import ( @@ -163,9 +166,10 @@ async def serialize_response( if is_coroutine: value, errors_ = field.validate(response_content, {}, loc=("response",)) else: - value, errors_ = await run_in_threadpool( - field.validate, response_content, {}, loc=("response",) - ) + # Run without a capacity limit for similar reasons as marked in fastapi/concurrency.py + exit_limiter = CapacityLimiter(1) + validate_func = functools.partial(field.validate, loc=("response",)) + value, errors_ = await anyio.to_thread.run_sync(validate_func, response_content, {}, limiter=exit_limiter) if isinstance(errors_, list): errors.extend(errors_) elif errors_: