Exercise 1: What "The Event Loop Stays Free" Actually Means — Possible Solution ==================================================================== WHAT await client.get(...) ACTUALLY DOES ------------------------------ When the route hits await client.get(...), execution of this particular request handler pauses at that exact point, but control returns to FastAPI's own event loop rather than the whole process sitting idle. While waiting for Open Food Facts to respond, that same event loop can pick up and start processing a completely different incoming request on the very same worker process - handling other users' requests during the time this one request is simply waiting on a network response it hasn't received yet. WHY DJANGO'S SYNCHRONOUS requests CALL DOESN'T OFFER THE SAME BENEFIT ------------------------------ A synchronous requests.get(...) call blocks the entire thread or worker process handling that request until the response comes back - there's no equivalent mechanism for that worker to go do something else in the meantime. Whatever worker is handling that view is simply unavailable to process any other request for the full duration of the external API call, even though it's doing nothing but waiting. WHY THIS WORKS AS AN ANSWER ------------------------------ It correctly explains that awaiting an async call yields control back to the event loop, allowing other requests to be served in the meantime on the same worker, and correctly explains that a synchronous call has no equivalent mechanism - the worker is fully blocked and unavailable to anything else for the entire wait.