Зачем для uvicorn'а нужен gunicorn?
В питоне есть такая штука как GIL. Глобальная блокировка интерпретатора. Это фундаментальная особенность CPython-реализации питона. Эта особенность не позволяет одновременно работать более чем одному потоку. То есть в питоне можно запускать потоки, но одновременно работать 2 и больше потоков не будет. В каждый конкретный момент времени будет работать только 1 поток. А нам бы хотелось, чтобы одновременно могли обрабатываться несколько http-запросов. Потому что ядер на сервере много, а толку от них с питоновскими тредами=потоками мало.
Поээээтому, чтобы всё было чётенько и одновременно могли обрабатываться несколько http-запросов, а также были утилизированы=задействованы все процессорные ядра, вместо тредов запускают процессы. Процессы не имеют ограничений GIL, могут работать одновременно несколько процессов на многоядерных процессорах, а этого-то нам и надо.
Нооо возникает тогда задачка управления этими процессами. Запустили мы 8 процессов, пришли на них какие-то http-запросы, они легли на разные процессы, и в процессе обработки одного из этих запросов что-то пошло не так, какая-то необработанная ошибка и т.п. и процесс упал. Нужен механизм, который его переподнимет. Да и начальное создание процессов тоже задача, кто-то должен её делать. То есть нужен process manager, менеджер процессов.
Задача обработки http-запросов и задача управления процессами сервера (управления воркерами, которые делают work=работу в данном случае по обработке хттп запросов) — это разные задачи. Какие-то инструменты могут их в себе сочетать, а какие-то могут выполнять только одну из этих двух задач. Вот uvicorn не занимается управлением своими процессами, отдает это на откуп инструмента, который уже давно проверен и хорошо менеджерит процессы — gunicorn.
Вот собственно и всё!
#python #backend #IT
В питоне есть такая штука как GIL. Глобальная блокировка интерпретатора. Это фундаментальная особенность CPython-реализации питона. Эта особенность не позволяет одновременно работать более чем одному потоку. То есть в питоне можно запускать потоки, но одновременно работать 2 и больше потоков не будет. В каждый конкретный момент времени будет работать только 1 поток. А нам бы хотелось, чтобы одновременно могли обрабатываться несколько http-запросов. Потому что ядер на сервере много, а толку от них с питоновскими тредами=потоками мало.
Поээээтому, чтобы всё было чётенько и одновременно могли обрабатываться несколько http-запросов, а также были утилизированы=задействованы все процессорные ядра, вместо тредов запускают процессы. Процессы не имеют ограничений GIL, могут работать одновременно несколько процессов на многоядерных процессорах, а этого-то нам и надо.
Нооо возникает тогда задачка управления этими процессами. Запустили мы 8 процессов, пришли на них какие-то http-запросы, они легли на разные процессы, и в процессе обработки одного из этих запросов что-то пошло не так, какая-то необработанная ошибка и т.п. и процесс упал. Нужен механизм, который его переподнимет. Да и начальное создание процессов тоже задача, кто-то должен её делать. То есть нужен process manager, менеджер процессов.
Задача обработки http-запросов и задача управления процессами сервера (управления воркерами, которые делают work=работу в данном случае по обработке хттп запросов) — это разные задачи. Какие-то инструменты могут их в себе сочетать, а какие-то могут выполнять только одну из этих двух задач. Вот uvicorn не занимается управлением своими процессами, отдает это на откуп инструмента, который уже давно проверен и хорошо менеджерит процессы — gunicorn.
Вот собственно и всё!
#python #backend #IT
👍293🔥28❤10🎉2
Разбираем задачку на функциональное программирование с Codewars:)
https://youtu.be/SjSY9PBfDj4
#youtube #IT #python
https://youtu.be/SjSY9PBfDj4
#youtube #IT #python
YouTube
Разбор задачки на функциональное программирование в Python
Разбираем ещё одну задачку с codewars на функциональное программирование в Python.
Мой курс «Хардкорная веб-разработка» — https://course.to.digital
Книжный клуб Ботаним!, где мы читаем хорошие ИТ-книги: https://botanim.to.digital/
Telegram: https://t0digital.t.me…
Мой курс «Хардкорная веб-разработка» — https://course.to.digital
Книжный клуб Ботаним!, где мы читаем хорошие ИТ-книги: https://botanim.to.digital/
Telegram: https://t0digital.t.me…
🔥83👍31❤4🤔2
Смотрим, что нового-бодрого-прекрасного завезли в релизе Python 3.11, вышедшем вчера!
https://youtu.be/hF_hul5k07A
#YouYube #python #IT #news
https://youtu.be/hF_hul5k07A
#YouYube #python #IT #news
YouTube
⚡Python 3.11 — СКОРОСТНОЙ горячий пирожочек!
Смотрим, что нового-бодрого-прекрасного завезли в релизе Python 3.11, вышедшем вчера!
Мой курс «Хардкорная веб-разработка» — https://course.to.digital
Книжный клуб Ботаним!, где мы читаем хорошие ИТ-книги: https://botanim.to.digital/
Telegram — https://xn--r1a.website/t0digital…
Мой курс «Хардкорная веб-разработка» — https://course.to.digital
Книжный клуб Ботаним!, где мы читаем хорошие ИТ-книги: https://botanim.to.digital/
Telegram — https://xn--r1a.website/t0digital…
👍161🎉23🔥16❤11😢2
Вдогонку — спрашивают, а что почитать по пайтону для начинающих или что почитать для подготовки к твоему курсу, если есть время и возможность.
2 книги.
* Простой Python, Билл Любанович, 2 издание
* Начинаем программировать на Python, Гэддис Тони, 5 издание
Скоро (ннннаверное!) будет видео с обзором книг по Python вообще, там подробнее расскажу. Но кто хочет подготовиться к курсу и не умеет пока уверенно в Python, будет полезно почитать эти книги. Если вы совсем новичок, то начните со второй. Если уже что-то умеете — возможно вам будет достаточно первой.
#books #python
2 книги.
* Простой Python, Билл Любанович, 2 издание
* Начинаем программировать на Python, Гэддис Тони, 5 издание
Скоро (ннннаверное!) будет видео с обзором книг по Python вообще, там подробнее расскажу. Но кто хочет подготовиться к курсу и не умеет пока уверенно в Python, будет полезно почитать эти книги. Если вы совсем новичок, то начните со второй. Если уже что-то умеете — возможно вам будет достаточно первой.
#books #python
❤106👍48🔥41
Telegram бот @donate позволяет подключать донаты в Telegram, а также создавать платные закрытые каналы по подписке. И всем-то он хорош, да только не умеет ограничивать доступ в чат, привязанный к платному каналу. Это-то мы и пофиксим собственным решением — задействуем Telegram Bot API, Telegram API и Python с библиотекой Telethon. Вжух!
https://youtu.be/yBw1b2hFI_4
Комментарии на YouTube, пожалуйста!
#python #IT #youtube
https://youtu.be/yBw1b2hFI_4
Комментарии на YouTube, пожалуйста!
#python #IT #youtube
YouTube
Дорабатываем Telegram бот donate: Python, Telegram Bot API, Telegram API (Telethon)
Telegram бот donate позволяет подключать донаты в Telegram, а также создавать платные закрытые каналы по подписке. И всем-то он хорош, да только не умеет ограничивать доступ в чат, привязанный к платному каналу. Это-то мы и пофиксим собственным решением —…
👍124🔥21❤4
Большое интервью Гвидо ван Россума час назад вышло у Лекса Фридмана
https://www.youtube.com/watch?v=-DVyjdw4t9I
0:00 - Introduction
0:48 - CPython
6:01 - Code readability
10:22 - Indentation
26:58 - Bugs
38:26 - Programming fads
53:37 - Speed of Python 3.11
1:18:31 - Type hinting
1:23:49 - mypy
1:29:05 - TypeScript vs JavaScript
1:45:05 - Best IDE for Python
1:55:05 - Parallelism
2:12:58 - Global Interpreter Lock (GIL)
2:22:36 - Python 4.0
2:34:53 - Machine learning
2:44:35 - Benevolent Dictator for Life (BDFL)
2:56:11 - Advice for beginners
3:02:43 - GitHub Copilot
3:06:10 - Future of Python
#IT #Python
https://www.youtube.com/watch?v=-DVyjdw4t9I
0:00 - Introduction
0:48 - CPython
6:01 - Code readability
10:22 - Indentation
26:58 - Bugs
38:26 - Programming fads
53:37 - Speed of Python 3.11
1:18:31 - Type hinting
1:23:49 - mypy
1:29:05 - TypeScript vs JavaScript
1:45:05 - Best IDE for Python
1:55:05 - Parallelism
2:12:58 - Global Interpreter Lock (GIL)
2:22:36 - Python 4.0
2:34:53 - Machine learning
2:44:35 - Benevolent Dictator for Life (BDFL)
2:56:11 - Advice for beginners
3:02:43 - GitHub Copilot
3:06:10 - Future of Python
#IT #Python
YouTube
Guido van Rossum: Python and the Future of Programming | Lex Fridman Podcast #341
Guido van Rossum is the creator of Python programming language. Please support this podcast by checking out our sponsors:
- GiveDirectly: https://givedirectly.org/lex to get gift matched up to $1000
- Eight Sleep: https://www.eightsleep.com/lex to get special…
- GiveDirectly: https://givedirectly.org/lex to get gift matched up to $1000
- Eight Sleep: https://www.eightsleep.com/lex to get special…
👍176🔥50❤9🎉3🥰2
Внезапно узнал, переустанавливая вчера
Локализовав проблему, воспроизвёл её на минимальном коде:
… и падает SSL ошибка. То есть все HTTPS запросы не алё.
Погуглив, выяснилось, что Python на маке вообще, оказывается, с версии чуть ли не 3.6 не дружит с сертификатами и, чтобы всё было чётенько, после установки надо подшаманить. Я Python из исходников собираю по привычке, возможно, если ставить из pkg установщика, такой проблемы нет, не в курсе.
Итого, накатываем пакет
И добавляем три переменные окружения, прописав их в
и ура-ура!
Видос про Poetry у меня был, https://youtu.be/KOC0Gbo_0HY, кто не в курсе что это — оч рекомендую!
Сейчас еще один материал готовлю по нему:)
#IT #python
poetry, что он не устанавливается, установщик это Python скрипт и он падает с SSL: CERTIFICATE_VERIFY_FAILED на домен pypi.org.Локализовав проблему, воспроизвёл её на минимальном коде:
import urllib.request
url = "https://pypi.org"
with urllib.request.urlopen(url) as f:
print(f.read(1))
… и падает SSL ошибка. То есть все HTTPS запросы не алё.
Погуглив, выяснилось, что Python на маке вообще, оказывается, с версии чуть ли не 3.6 не дружит с сертификатами и, чтобы всё было чётенько, после установки надо подшаманить. Я Python из исходников собираю по привычке, возможно, если ставить из pkg установщика, такой проблемы нет, не в курсе.
Итого, накатываем пакет
certifi на ваш используемый интерпретатор: python3.10 -m pip install certifi
И добавляем три переменные окружения, прописав их в
.bashrc или в .zshrc в зависимости от вашей оболочки: CERT_PATH=$(python3.10 -m certifi)
export SSL_CERT_FILE=${CERT_PATH}
export REQUESTS_CA_BUNDLE=${CERT_PATH}
и ура-ура!
Видос про Poetry у меня был, https://youtu.be/KOC0Gbo_0HY, кто не в курсе что это — оч рекомендую!
Сейчас еще один материал готовлю по нему:)
#IT #python
👍218❤62🔥14🥰3😁1
Поговорим об управлении зависимостями в Python-проектах и создании сервисов с Poetry!
https://youtu.be/SMYdy7dViiw
#IT #python #backend
https://youtu.be/SMYdy7dViiw
#IT #python #backend
👍109🔥7🎉5❤4😁4
Иногда у нас-человеков больше информации о типе, чем у статического проверятора типов в Python или TS. Проверятор говорит — вот тут у тебя несоответствие типов, ай-яй-яй, а ты-то знаешь, что всё чётенько.
Для этого придумано приведение типов, в TS реализуется чаще всего с
В TS реализовано бодрее, чем в Python — TS позволяет только понижать типы с более общего до более конкретного (например, с
Теперь TS будет знать, что в
А вот привести словарь к строке не позволит:
Скажет, что ты что-то не то делаешь, малый.
А в Python происходит просто заглушение проверятора типов, без какой-то проверки возможности приведения типа:
Проверятор типов это пропустит и оно весело грохнется уже в рантайме.
Впрочем, TS тоже можно обмануть — но это надо писать дополнительно:
Это тоже весело грохнется уже в рантайме.
#it #python #typescript
Для этого придумано приведение типов, в TS реализуется чаще всего с
as, в Python с from typing import cast.В TS реализовано бодрее, чем в Python — TS позволяет только понижать типы с более общего до более конкретного (например, с
HTMLElement до HTMLDivElement):const my_div = document.querySelector(".smth") as HTMLDivElement
Теперь TS будет знать, что в
my_div именно div, а не просто какой-то общий html элемент.А вот привести словарь к строке не позволит:
const structure = {name: "Иваныч"}
console.log((structure as string).toUpperCase())
Скажет, что ты что-то не то делаешь, малый.
А в Python происходит просто заглушение проверятора типов, без какой-то проверки возможности приведения типа:
from typing import cast
def upper(s: str):
return s.upper()
structure = {"name": "Иваныч"}
upper(cast(str, structure))
Проверятор типов это пропустит и оно весело грохнется уже в рантайме.
Впрочем, TS тоже можно обмануть — но это надо писать дополнительно:
const structure = {name: "Иваныч"}
console.log(((structure as unknown) as string).toUpperCase())
Это тоже весело грохнется уже в рантайме.
#it #python #typescript
👍117🔥8😁7❤1🥰1