Browse Source

📝 Tweak the docs text and example

pull/14681/head
Sebastián Ramírez 5 months ago
parent
commit
163e35c544
  1. 10
      docs/en/docs/advanced/custom-response.md
  2. 5
      docs_src/custom_response/tutorial007_py310.py

10
docs/en/docs/advanced/custom-response.md

@ -167,13 +167,15 @@ You can also use the `status_code` parameter combined with the `response_class`
Takes an async generator or a normal generator/iterator and streams the response body.
{* ../../docs_src/custom_response/tutorial007_py310.py hl[4,17] *}
{* ../../docs_src/custom_response/tutorial007_py310.py hl[3,16] *}
/// note
/// note | Technical Details
An `async` task can only be cancelled when it reaches an `await`. If there is no `await`, the generator (function with `yield`) can not be cancelled properly and may keep running even after cancellation is requested.
An `async` task can only be cancelled when it reaches an `await`. If there is no `await`, the generator can not be cancelled properly and may keep running even after cancellation is requested.
Since this small example does not need any `await` statements, we add an `await anyio.sleep(0)` to give the event loop a chance to handle cancellation.
Since this small example does not need any `await` statements, we add an `await asyncio.sleep(0)` to give the event loop a chance to handle cancellation.
This would be even more important with large or infinite streams.
///

5
docs_src/custom_response/tutorial007_py310.py

@ -1,5 +1,4 @@
import asyncio
import anyio
from fastapi import FastAPI
from fastapi.responses import StreamingResponse
@ -9,7 +8,7 @@ app = FastAPI()
async def fake_video_streamer():
for i in range(10):
yield b"some fake video bytes"
await asyncio.sleep(0)
await anyio.sleep(0)
@app.get("/")

Loading…
Cancel
Save