TGViewer
Хитрый Питон Хитрый Питон @tricky_python · 3.47K subscribers
Post #94 2.5K
Еще одна интересная статья из серии "как все устроено под капотом". В общем случае отдавать файлы с помощью питоновских фреймоврков идея не очень хорошая - это будет не очень производительно, гораздо лучше файлы раздавать с какого-нибудь S3-хранилища, использовать CDN или хотя-бы Nginx (или аналог). Тем не менее, иногда это нужно и оправданно.

И дальше идет интересное, оказывается FastAPI (а точнее Starlette на которой он основан) читает файл чанками(кусочками) и отдает браузеру. И чтение файла по кусочку в цикле - очевидно не самая эффективная операция.

А вот aiohttp поступает умнее - он использует loop.sendfile, который в свою очередь использует os.sendfile() который использует доступную на Linux и MacOS функцию ядра sendfile(), которая позволяет отправить файл в сокет максимально эффективно. И судя по тестам вариант с sendfile в 7 раз быстрее.

В общем, если вы генерируете и отдаете в браузер файлы питоном и делаете это часто - посмотрите, как это реализовано в используемом вами фреймворке, возможно вы сможете сэкономить ресурсы. Оригинальная статья https://medium.com/@alsadi/secret-sauce-is-zero-copy-single-context-switching-b749bd614dca
GitHub starlette/starlette/responses.py at ea70fd57b286824350da88c6d484c32bdf31627a · Kludex/starlette The little ASGI framework that shines. 🌟. Contribute to Kludex/starlette development by creating an account on GitHub.
  • 🔥 28
  • 👍 12
More from @tricky_python
  1. Sep 16, 2026Друзья, у нас важное объявление! Некоторые из вас помнят наши курсы Learn Python - когда-т…
  2. Sep 7, 2026В документации Python появилась отдельная страница со сложностью операций над встроенными…
  3. Sep 3, 2026В эту пятницу в 14:00 (по мск) обсудим новости августа в прямом эфире Moscow Python Podcas…
  4. Sep 2, 2026Казалось бы, что может быть проще, чем разбить текст на строки? Может быть, кто-то еще пом…
  5. Aug 31, 2026Пока я был в отпуске и путешествовал, вышел перевод документации Python на русский. Звучит…
  6. Aug 20, 2026Есть такой язык - Mojo: • синтаксически он близок к python • дает возможность вызывать и и…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →