Зачем для 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
https://youtu.be/haqLhNN5ZdY
Поговорим о возможностях аспектно-ориентированного программирования в Python, о внедрении зависимостей DI и DI-контейнерах в Python на примере punq, а также в целом о Java подходах vs Python подходах к реализации архитектуры.
Из разборов Ботаним!, 11 глава книги Чистый код, Роберт Мартин.
#youtube #IT #python #codebetter #tools #ботаним
Поговорим о возможностях аспектно-ориентированного программирования в Python, о внедрении зависимостей DI и DI-контейнерах в Python на примере punq, а также в целом о Java подходах vs Python подходах к реализации архитектуры.
Из разборов Ботаним!, 11 глава книги Чистый код, Роберт Мартин.
#youtube #IT #python #codebetter #tools #ботаним
YouTube
DI, DI-контейнеры, аспектно-ориентированное программирование в Python vs Java. Чистый код, 11 глава
Поговорим о возможностях аспектно-ориентированного программирования в Python, о внедрении зависимостей DI и DI-контейнерах в Python на примере punq, а также в целом о Java подходах vs Python подходах к реализации архитектуры.
Из разборов Ботаним! https:…
Из разборов Ботаним! https:…
👍69🔥12❤6
Зззнатокам Python хитрый вопрос!
Какой тип поставить у параметра
Код скопировать можно здесь.
Вот так это делается на TS
А как на Python, м:)?
#IT #python #typescript #codebetter
Какой тип поставить у параметра
field функции print_user_field, чтобы последняя строка при проверке типа показала ошибку? Перечислять второй раз поля User — нельзя, ибо делает возможным рассинхрон имён полей в классе и отдельном их перечислении.Код скопировать можно здесь.
Вот так это делается на TS
А как на Python, м:)?
#IT #python #typescript #codebetter
👍38🔥5😁4
Почему перечислять второй раз поля — плохо? Потому что возможна ситуация на скриншоте ⬆️ — поле
Почему вынести эту проверку на переданное значение
Систематических способа минимизировать ошибки в рантайме я знаю два, ТТ — как Тульский Токарев, только Типизация и Тесты.
Оба способа не гарантируют отсутствие ошибок, но позволяют вылавливать какое-то их количество на этапах до рантайма, то есть до пользователей. Чем лучше ТТ, тем меньше ошибок в рантайме.
Можно ли обойтись без типизации? Конечно, драматически увеличив количество тестов и проверок в коде, засорив код этими проверками.
Типизация помогает сократить количество тестов, потому что большой пласт ошибок выявляется на этапе проверки типов.
#python #it #codebetter
name в User переименовалось в username, а в типах параметра field осталось name. Система проверки типов не покажет ошибку при вызове print_user_name(user, "name"), а хотелось бы ошибку увидеть, так как поля name уже нет.Почему вынести эту проверку на переданное значение
field в блок try/except — плохо? Потому что это уведёт ошибку в runtime, а надо минимизировать ошибки в рантайме, ошибки в рантайме = грустящие пользователи.Систематических способа минимизировать ошибки в рантайме я знаю два, ТТ — как Тульский Токарев, только Типизация и Тесты.
Оба способа не гарантируют отсутствие ошибок, но позволяют вылавливать какое-то их количество на этапах до рантайма, то есть до пользователей. Чем лучше ТТ, тем меньше ошибок в рантайме.
Можно ли обойтись без типизации? Конечно, драматически увеличив количество тестов и проверок в коде, засорив код этими проверками.
Типизация помогает сократить количество тестов, потому что большой пласт ошибок выявляется на этапе проверки типов.
#python #it #codebetter
👍43🔥30❤2
Питонячие библиотеки и инструменты, о которых вы могли не знать
https://tryolabs.com/blog/2022/12/26/top-python-libraries-2022
По-нашенски: https://habr.com/ru/post/707916/
#python #it #tools
https://tryolabs.com/blog/2022/12/26/top-python-libraries-2022
По-нашенски: https://habr.com/ru/post/707916/
#python #it #tools
Tryolabs
Top Python libraries of 2022
There are so many amazing Python libraries and tools out every year that it's hard to keep track of them all. That's why we share with you our hand-picked selection of our best picks.
👍131🔥19❤8🎉1
Почему в Python реализована глобальная функция
https://www.youtube.com/watch?v=0-czTUWRReI
https://vk.com/video-176970991_456239186
https://dzen.ru/video/watch/63f9fbc41e751c186b7f6f11
#youtube #it #python
len() и что об этом говорит Гвидо ван Россум?https://www.youtube.com/watch?v=0-czTUWRReI
https://vk.com/video-176970991_456239186
https://dzen.ru/video/watch/63f9fbc41e751c186b7f6f11
#youtube #it #python
YouTube
Почему в Python реализована глобальная функция len() и что об этом говорит Гвидо ван Россум?
Почему в Python реализована глобальная функция len() и что об этом говорит Гвидо ван Россум?
Мой курс «Хардкорная веб-разработка» — https://course.to.digital
Книжный клуб:
https://xn--r1a.website/t0digital/528
https://botanim.to.digital/
https://botanim_to_digital_bot.t.me/…
Мой курс «Хардкорная веб-разработка» — https://course.to.digital
Книжный клуб:
https://xn--r1a.website/t0digital/528
https://botanim.to.digital/
https://botanim_to_digital_bot.t.me/…
👍97😁9🔥7❤2