Девман для питонистов
497 subscribers
111 photos
2 videos
122 links
Веб-разработка на Python. Канал от практиков.
Download Telegram
⚡️Давайте вместе разберемся, что не так с этой строчкой кода?

def is_draft_deal(self, obj):
...

👉 Чтобы понять, что можно исправить, загляните в типичные улучшения Девмана. Например, Уточните название функции

Выбирайте вариант ответа в опросе 👇
💡 Функция подразумевает некое действие, динамику. is, has, must, should и прочие подобные глаголы отлично подходят для наименования переменной-флага, в который можно сложить результат работы функции. А название самой функции следует начинать с ее основного действия.

Стандартные методы Django частенько используют названия, похожие на флаги, но это не повод создавать свои собственные по тому же принципу. Например, если функция с названием is_draft_deal будет передана в качестве аргумента, не получится сразу понять, что это именно функция, а не переменная.

Лучшим вариантом будет назвать функции 👉

def check_deal_is_draft(self, obj):
...


#нейминг_python
Девман для питонистов
🚀Запускаем большую майскую распродажу! Скидки на ВСЕ мини-курсы с 1 по 18 мая! Майские праздники — отличный повод начать что-то новое и прокачать скиллы! 🔥 «Основы Python» — разберитесь с базовыми конструкциями языка и попрактикуйтесь в отладке кода! 🔥
⚡️Напоминаем, что сейчас действуют скидки на ВСЕ мини-курсы Devman!

Успейте приобрести мини-курс со скидкой 25% и прокачать скиллы на майских праздниках!

⚡️Выбирайте мини-курсы со скидкой здесь или задавайте вопросы нам в Telegram!
Сегодня от всей души, поздравляем всех с Великим Юбилеем Победы.

Здоровья — старшим.
Стойкости и удачи — взрослым.
Воспитания и жажды к знаниям — для молодых.
И пусть всё у вас будет хорошо!

С Днём Великой Победы 🤝
9🔥4👍2
✍️В экосистеме Python было несколько попыток создать фреймворки, которые могли бы конкурировать с FastAPI, особенно в области высокопроизводительных асинхронных приложений.

Не все из них смогли закрепиться на рынке или получить широкое признание. Вот список конкурентов FastAPI, которые перестали развиваться, или так и не получили популярности.
👍5🔥21
🤔 Давайте вместе разберемся, что не так с этим кодом?

import argparse
import os
import httpx
from dotenv import load_dotenv
import json

EARTH_RADIUS_KM = 6378

👉 Чтобы понять, что можно исправить, загляните в типичные улучшения Девмана.
💡Согласно рекомендациям PEP8, импорты стоит разделять на 3 группы. И записывать каждую в отдельных блоках:
— стандартные библиотеки,
— сторонние библиотеки,
— локальные модули.

Кроме того, внутри каждой группы рекомендуется располагать импорты в алфавитном порядке и разделять пустой строкой импорты целиком и отдельных элементов.

Правильное расположение импортов будет таким:

import argparse
import json
import os

import httpx

from dotenv import load_dotenv


#оформление_python
Асинхронность vs многопоточность в FastAPI: как не убить производительность

Все, кто хоть немного слышал про FastAPI, вероятно, знают, что он асинхронный. Но в приложениях, написанных с помощью этого фреймворка, можно использовать и синхронные библиотеки. При этом неопытный разработчик может поломать асинхронность кода и таким образом лишиться его преимуществ для проекта.

Представьте: ваш сервис отлично работает при нагрузке в 100 RPS, но когда приходит 1000 запросов в секунду — всё начинает сыпаться. Сервер захлёбывается, время ответа растёт, а клиенты получают ошибки 503 Service Unavailable. Вы добавляете больше CPU и памяти, но проблема не исчезает. В чём же дело?

Проблема синхронных функций в асинхронном подходе

from fastapi import FastAPI
import time # Синхронная библиотека!


app = FastAPI()


@app.get("/blocking-endpoint")
async def blocking_endpoint():
"""Этот endpoint заблокирует весь event loop на 5 секунд!"""
time.sleep(5) # Синхронная блокирующая операция
return {"message": "Запрос выполнен"}

— Когда вы вызываете time.sleep(5) внутри async def, весь асинхронный event loop приостанавливается. event loop — это механизм для управления асинхронными операциями. Он позволяет обрабатывать задачи, не блокируя основной поток выполнения программы.
— Даже если другие пользователи отправляют запросы в это время, они не будут обрабатываться, пока sleep не завершится.

Это сводит на нет все преимущества от написания сложной логики асинхронного кода

👉 Если вы разрабатываете программный продукт на FastAPI и плохо разбираетесь в асинхронщине — используйте встроенный механизм многопоточности.

👉Собрали список популярных синхронных библиотек.

Встроенная многопоточность

FastAPI по умолчанию заботится о производительности при использовании синхронных (блокирующих) операций. Вместо того чтобы тормозить весь сервер, он автоматически выносит такие задачи в фоновые потоки.

Если вы объявляете endpoint*, как обычную функцию (def):
— FastAPI Определяет, что функция синхронная.
— FastAPI запускает функцию в ThreadPoolExecutor — пуле потоков.
— Пока функция выполняется, основной поток (event loop) продолжает работать и обрабатывать другие запросы.

*Endpoint — это конечная точка в API, к которой можно обратиться для выполнения нужного действия или получения данных. Например, на сайте Девмана есть эндпойнт /modules.

from fastapi import FastAPI
import time


app = FastAPI()


@app.get("/sync-route") # ← Обычная синхронная функция!
def sync_endpoint():
time.sleep(5) # Блокирующая операция
return {"message": "Это выполнится в отдельном потоке!"}

❗️В Python потоки выполняются не одновременно, а с переключениями. Но для I/O-операций (ожидание БД, сетевых запросов) этого достаточно — пока один поток ждет ответа, другой может работать. Если таких запросов будет слишком много, пул потоков переполнится.

❗️ Важно помнить, что Fast API создает потоки автоматически только для синхронных endpoint-функций:
— Если синхронный код вызывается внутри зависимостей, фоновых задач, middleware, а также при обработке WebSocket автоматическое распределение по потокам не работает.
— Встроенная многопоточность не работает в async def endpoints при работе с синхронными библиотеками. Например, requests.get(), pandas.read_csv() или psycopg2 требуют ручного выноса в потоки при вызовах из асинхронных обработчиков.

👉 FastAPI применяет умную многопоточность для синхронного кода, но это не замена полноценной параллельной обработке. Для сложных сценариев нужны дополнительные инструменты: процессы и корутины.

👉 Если вы плохо понимаете механизмы asyncio, а ваш pet-проект не предполагает высокой нагрузки (более 20 запросов одновременно) — можно положиться на встроенный механизм распределения по потокам.

Это сильно упростит код и снимет ограничения на использование синхронных библиотек, а также позволит сосредоточиться на изучении механизмов FastAPI, вместо погружения в «глубокую нору» асинхронной разработки.
1