Start here. This is the direct spoken answer to practice first.
Overview
Separates caller time bounds, cancellation propagation, and ownership of protected underlying work.
An asyncio timeout bounds how long the current scope waits and uses cancellation internally, translating the timeout condition to TimeoutError outside the timeout context. wait_for() also waits with a limit and cancels the supplied awaitable on timeout. shield() prevents cancellation of the inner awaitable when the outer waiter is cancelled, but the outer await still raises cancellation. Shielding changes ownership; it does not make work reliable.