Классическая статья про DI от Мартина Фаулера.
https://martinfowler.com/articles/injection.html
#dependency_injection
https://martinfowler.com/articles/injection.html
#dependency_injection
martinfowler.com
Inversion of Control Containers and the Dependency Injection
pattern
pattern
Explaining the Dependency Injection pattern, by contrasting it with Service Locator. The choice between them is less important than the principle of separating configuration from use.
Выполняем:
Теперь можно программно запускать и удалять сервера БД. Полезно, например, для тестов, когда тесты сами могут создать себе такую базу, которая им нужна, сделать своё дело и замести все следы. В комплекте даже есть фикстура для
Сборки пока что публикуются только для Linux, следовательно, на других ОС это работать не будет.
https://github.com/michelp/postgresql-wheel
$ pip install postgresql-wheelИ теперь у нас в виртуальном окружении есть полноценный PostgreSQL! Изолированный, уже скомпилированный. Для установки не потребовалось
sudo
.Теперь можно программно запускать и удалять сервера БД. Полезно, например, для тестов, когда тесты сами могут создать себе такую базу, которая им нужна, сделать своё дело и замести все следы. В комплекте даже есть фикстура для
pytest
.Сборки пока что публикуются только для Linux, следовательно, на других ОС это работать не будет.
https://github.com/michelp/postgresql-wheel
GitHub
GitHub - michelp/postgresql-wheel: A Python wheel containing PostgreSQL
A Python wheel containing PostgreSQL. Contribute to michelp/postgresql-wheel development by creating an account on GitHub.
Обсуждения выпиливания GIL продолжаются.
Недавно Гвидо создал тред по поводу библиотек с нативным кодом, которые никак не защищают свои внутренние данные от других потоков и просто полагаются на наличие GIL, который исключит возможность одновременного доступа к данным. Таких библиотек много, и они начнут ломаться разными неожиданными способами, если просто отнять у них GIL. Нужно найти такой подход, чтобы они не сломались и тем самым не создали ещё одну несовместимую версию языка (никто не хочет повторения истории с 2->3).
То, что уже обсуждаются уже конкретные детали плана, заставляет меня верить, что в основном идея удаления GIL обсуждена и принята.
https://discuss.python.org/t/nogil-mode-and-extensions/11546/11
#gil
Недавно Гвидо создал тред по поводу библиотек с нативным кодом, которые никак не защищают свои внутренние данные от других потоков и просто полагаются на наличие GIL, который исключит возможность одновременного доступа к данным. Таких библиотек много, и они начнут ломаться разными неожиданными способами, если просто отнять у них GIL. Нужно найти такой подход, чтобы они не сломались и тем самым не создали ещё одну несовместимую версию языка (никто не хочет повторения истории с 2->3).
То, что уже обсуждаются уже конкретные детали плана, заставляет меня верить, что в основном идея удаления GIL обсуждена и принята.
https://discuss.python.org/t/nogil-mode-and-extensions/11546/11
#gil
Discussions on Python.org
Nogil mode and extensions
If we were to transition to nogil mode, the biggest concern for users would be extension modules. While Python code already has to deal with preemptive scheduling, C extensions have always seen their data structures protected by the GIL, and this would go…
Автоформаттер
https://twitter.com/llanga/status/1455496802812239876?s=21
#black
black
принял «политику стабильности». В 2022 ожидайте стабильный релиз.https://twitter.com/llanga/status/1455496802812239876?s=21
#black
Twitter
Łukasz Langa
Version 21.10b0 of Black, your friendly #Python auto-formatter, is out now! 🖤 The biggest news is that thanks to @pradyunsg and @jelleszijlstra we adopted a stability policy that will go into effect starting with the first stable release in Jan 2022. 🤯 b…
В связи с чем проект Django собирается начать форматировать свой код при помощи
Этот автоформаттер постепенно становится де-факто стандартом оформления кода. Но кажется, что Django будет первым проектом такого масштаба, который решил «очернить» свой код.
https://twitter.com/adamchainz/status/1455850491519254531?s=21
#black #django
black
.Этот автоформаттер постепенно становится де-факто стандартом оформления кода. Но кажется, что Django будет первым проектом такого масштаба, который решил «очернить» свой код.
https://twitter.com/adamchainz/status/1455850491519254531?s=21
#black #django
Twitter
Adam Johnson
Very exciting. Django will be adopting Black in the new year, as DEP 8 declared we will use the first stable release. twitter.com/llanga/status/…
Forwarded from ☕️ Мерлин заваривает τσάι 🐌
«Прежде всего, дзен Python говорит, что любое решение должно быть единственное. Поэтому в Python всего минимум по три.»
There should be one-- and preferably only one --obvious way to do it.А какие ещё вы знаете примеры нарушения этого принципа? Желательно в стандартной библиотеке.
Surprisingly at the top of that curve is again 'no types'
https://twitter.com/fasterthanlime/status/1248025337235210243?s=20
#meme
https://twitter.com/fasterthanlime/status/1248025337235210243?s=20
#meme
Всячески рекомендую ютуб-канал "Диджитализируй!". Он периодически снимает классные видео про Python. А сегодня я нашёл там настолько полезное видео, что решил даже запостить его сюда, чтобы в следующий раз, когда беда вдруг снова внезапно меня настигнет, оно было под рукой.
https://www.youtube.com/watch?v=Q1RUYQIgVKM
#vim
https://www.youtube.com/watch?v=Q1RUYQIgVKM
#vim
YouTube
А есть ли вообще способ выйти из Vim? Как уничтожить Vim, если он внезапно открылся?
Мой курс «Хардкорная веб-разработка» — https://course.to.digital
Книжный клуб Ботаним!, где мы читаем хорошие ИТ-книги: https://botanim.to.digital/
Telegram: https://t0digital.t.me
Сказать спасибо за это видео можно здесь — https://boosty.to/digitalize.team…
Книжный клуб Ботаним!, где мы читаем хорошие ИТ-книги: https://botanim.to.digital/
Telegram: https://t0digital.t.me
Сказать спасибо за это видео можно здесь — https://boosty.to/digitalize.team…
Forwarded from DevBrain
5 ноября вышла вторая альфа Python 3.11 и по мнению людей, которым можно доверять, 3.11 на ~30% быстрее чем 3.10.
В первую очередь рост производительности это работа над идеями по оптимизации в рамках Faster CPython Project. Узнать о новых фичах в 3.11 можно по ссылке.
В первую очередь рост производительности это работа над идеями по оптимизации в рамках Faster CPython Project. Узнать о новых фичах в 3.11 можно по ссылке.
Python.org
Python Release Python 3.11.0a2
The official home of the Python Programming Language
Forwarded from Python Daily
“Zero-cost” exceptions are implemented. The cost of try statements is almost eliminated when no exception is raised. (Contributed by Mark Shannon in bpo-40222.)
Наконец-то сделали поддержку "бесплатных" исключений. Под бесплатностью имеется в виду что блок
Мне кажется что только одна эта оптимизация поспособствовала значительному ускорению 3.11.
#pydaily
Наконец-то сделали поддержку "бесплатных" исключений. Под бесплатностью имеется в виду что блок
try
не будет потреблять практически никаких ресурсов, если в нём не возникнет исключение. Во многих других языках это уже давно есть.Мне кажется что только одна эта оптимизация поспособствовала значительному ускорению 3.11.
#pydaily
Полезный доклад от Андрея Власовских — лида команды PyCharm в JetBrains — про то, как быстрее и умнее редактировать код. В целом, Андрей показывает довольно базовые вещи, которые логично было бы ожидать от IDE. Проблема в том, что многие люди не знают, что их IDE всякое такое умеет, и запускают (относительно) тяжелую среду разработки, чтобы пользоваться ей просто как блокнотом с подсветкой кода. Не надо так, IDE намного умнее. Нужно лишь запомнить один самый главный хоткей —
https://youtu.be/FW3_OPBxk2s
#jetbrains #pycharm
Find Action
!https://youtu.be/FW3_OPBxk2s
#jetbrains #pycharm
YouTube
Андрей Власовских, JetBrains «7 советов по редактированию кода в PyCharm»
Выступление на PYCON RUSSIA 2018
http://pycon.ru/2018/
http://pycon.ru/2018/
Pyjion — проект по скрещиванию ванильного CPython с JIT-компилятором из .NET — получил релиз с круглым номером 1.0.
Напомню:
* по идее этот проект может запускать любой валидный код на Python, включая все библиотеки с нативными модулями (
* работает с самым обычным CPython 3.10;
* работает на Windows, Linux и macOS;
* устанавливается через
* всё, что нужно, чтобы магия начала действовать — импортировать
Пока что проект не умеет работать с контекстными менеджерами и
Кто-нибудь уже пробовал? Ускорило?
https://www.trypyjion.com/
#pyjion #jit
Напомню:
* по идее этот проект может запускать любой валидный код на Python, включая все библиотеки с нативными модулями (
numpy
, pandas
, psycopg
и так далее) без пересборок и каких-либо дополнительных действий;* работает с самым обычным CPython 3.10;
* работает на Windows, Linux и macOS;
* устанавливается через
pip
, но будет рассчитывать, что в системе есть компилятор .NET 6;* всё, что нужно, чтобы магия начала действовать — импортировать
pyjion
, вызвать pyjion.enable()
перед основным кодом программы.Пока что проект не умеет работать с контекстными менеджерами и
async/await
. Но это не значит, что он не сможет запустить такой код. Просто JIT-компиляция для функций с такими инструкциями не произойдёт, и они будут работать в обычном интерпретируемом режиме.Кто-нибудь уже пробовал? Ускорило?
https://www.trypyjion.com/
#pyjion #jit
Попытался разобраться, благодаря чему Python 3.11 уже аж на 30% быстрее 3.10. Собрал небольшой синтетический микробенчмарк с делением чисел. И действительно сразу же видно, что даже на максимально простых примерах без каких-либо исключений 3.11 быстрее примерно на треть. В официальном ченджлоге не упоминается никаких таких оптимизаций, которые могли бы дать подобный эффект. Возможно, документацию пока просто не успели обновить. Возможно, это какой-то побочный эффект от ускорений, связанных с обработкой исключений. Похоже, надо идти в список коммитов в Git и искать ответы там 🤷♂️
По поводу "zero cost" exceptions. Разница между кодом вообще без исключений и кодом с блоком
Ссылки:
* детали моего наколеночного бенчмарка;
* идея бенчмарка взята из этого ответа.
По поводу "zero cost" exceptions. Разница между кодом вообще без исключений и кодом с блоком
try..except
, который ничего не ловит, действительно небольшая. Как утверждает официальный FAQ, такие блоки всегда были дешевыми. И в 3.11 эта разница действительно стала ещё меньше — 5 наносекунд против ~2 наносекунд. Тем не менее, цена всё ещё не нулевая. Наверное, именно поэтому автор этой оптимизации ставит кавычки вокруг "zero cost". Если же исключение возникает, то обе версии работают примерно с одинаковой скоростью.Ссылки:
* детали моего наколеночного бенчмарка;
* идея бенчмарка взята из этого ответа.
Gist
Python 3.10 vs. 3.11 comparison
Python 3.10 vs. 3.11 comparison. GitHub Gist: instantly share code, notes, and snippets.
Forwarded from oleg_log (Oleg Kovalov)
Джанго это я
НТР
Музыкальная пауза!
Смысла в песне никакого (хотя может это я просто не выкупил), но слова знакомые, забавно. Вообще, у этого исполнителя много забавных треков.
Смысла в песне никакого (хотя может это я просто не выкупил), но слова знакомые, забавно. Вообще, у этого исполнителя много забавных треков.