Полезный доклад от Андрея Власовских — лида команды 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)
Джанго это я
НТР
Музыкальная пауза!
Смысла в песне никакого (хотя может это я просто не выкупил), но слова знакомые, забавно. Вообще, у этого исполнителя много забавных треков.
Смысла в песне никакого (хотя может это я просто не выкупил), но слова знакомые, забавно. Вообще, у этого исполнителя много забавных треков.
Интересный побочный эффект принесло одно из изменений в Python 3.10 — каноничный пример про состояние гонки (race condition) между потоками перестал работать! Операция
https://stackoverflow.com/q/69993959/10650942
+=
(INPLACE_ADD
) стала чуть-чуть более атомарной. Полагаться на это поведение, конечно же, нельзя, потому что оно может измениться в любой момент.https://stackoverflow.com/q/69993959/10650942
Stack Overflow
Python threads difference for 3.10 and others
For some, simple thread related code, i.e:
import threading
a = 0
threads = []
def x():
global a
for i in range(1_000_000):
a += 1
for _ in range(10):
thread = threading.Thread(
import threading
a = 0
threads = []
def x():
global a
for i in range(1_000_000):
a += 1
for _ in range(10):
thread = threading.Thread(
PSF заплатите чеканной монетой, чеканной монетой, о-о-о.
Зачтётся все это, зачтётся все это!
Говорят, чтобы поддерживать нынешние инициативы на плаву (developer in residence, packaging), нужно 325 тыс. долларов в год. Чтобы нанять ещё людей, нужно уже 500+. Конечно, спонсоры, типа Google, Microsoft и Bloomberg, здорово выручают и помогают собрать хорошую долю от этой суммы, но всё равно каждая копеечка имеет значение. Python всё-таки community language, так что было бы здорово и обычным рядовым пользователям немного скинуться.
Even if donations are a portion of the PSF's revenue, every dollar makes an impact and allows the PSF financial stability to continue supporting a growing community!
https://www.python.org/psf/donations/2021-q4-drive/
Зачтётся все это, зачтётся все это!
Говорят, чтобы поддерживать нынешние инициативы на плаву (developer in residence, packaging), нужно 325 тыс. долларов в год. Чтобы нанять ещё людей, нужно уже 500+. Конечно, спонсоры, типа Google, Microsoft и Bloomberg, здорово выручают и помогают собрать хорошую долю от этой суммы, но всё равно каждая копеечка имеет значение. Python всё-таки community language, так что было бы здорово и обычным рядовым пользователям немного скинуться.
Even if donations are a portion of the PSF's revenue, every dollar makes an impact and allows the PSF financial stability to continue supporting a growing community!
https://www.python.org/psf/donations/2021-q4-drive/
Python.org
2021 end-of-the-year fundraiser!
The official home of the Python Programming Language
Кстати, в честь этой кампании по сбору средств, JetBrains снова открыли свою акцию — покупаешь PyCharm с хорошей скидкой в 30%, а все собранные средства отправляются прямиком в PSF. Актуально до 1 декабря!
Звучит примерно как «покупайте наш наркотик, а все деньги с вашей первой дозы мы переведём голодающим африканским детям»😅
Шучу, конечно. Инициатива крайне правильная. Я искренне уважаю JetBrains за то, что они активно участвуют в жизни сообществ многих ЯП. И наркотик у них качественный, я уже давно сижу. Оно явно стоит своих денег. Но нужно понимать, что это просто лишь ещё один способ расширить пользовательскую базу. В прочем, почему бы и нет, это ведь идёт на пользу всем.
https://lp.jetbrains.com/support-python/
UPD: будьте внимательны, эта акция не применяется для продления уже активных подписок, только для новых!
#jetbrains
Звучит примерно как «покупайте наш наркотик, а все деньги с вашей первой дозы мы переведём голодающим африканским детям»😅
Шучу, конечно. Инициатива крайне правильная. Я искренне уважаю JetBrains за то, что они активно участвуют в жизни сообществ многих ЯП. И наркотик у них качественный, я уже давно сижу. Оно явно стоит своих денег. Но нужно понимать, что это просто лишь ещё один способ расширить пользовательскую базу. В прочем, почему бы и нет, это ведь идёт на пользу всем.
https://lp.jetbrains.com/support-python/
UPD: будьте внимательны, эта акция не применяется для продления уже активных подписок, только для новых!
#jetbrains
JetBrains
PyCharm: the Python IDE for data science and web development
The Python IDE for data science and web development with intelligent code completion, on-the-fly error checking, quick-fixes, and much more.
Forwarded from Python Заметки
В модуле logging предусмотрен немного необычный способ форматирования строки без форматирования.
Если вам требуется указать в строке сообщения какой-либо аргумент то обычно это делается форматированием строки
Функция записи сообщения должна быть очень быстрой. Да, она в любом случае занимает время, но чем меньше тем лучше. И особенно, когда это сообщение не проходит по фильтру уровня логирования.
Например, у меня установлен уровень WARNING и выполняется вот такой вызов
Сообщение не попадает под установленный уровень логирования и будет проигнорировано. Это обрабатывается сразу же первой командой в вызываемой функции debug. Но при этом форматирование строки всё равно произойдёт!
И проблема не в самом форматировании, которое достаточно быстрое (даже при складывании строк через "+"), а в тех возможных действиях, которые придется вызвать для преобразования объекта user в строку.
Возможно, там будет запрос в БД, разбор больших массивов данных или еще что-то не очень быстрое (или не очень умное🤪).
Нам всё это придётся посчитать чтобы потом.....ничего с этим не сделать.
Поэтому правильно писать так:
#libs #tricks
logging.info('Message %s %s', arg1, arg2)
На самом деле, если вы его не используете то вы делаете неправильно!⚠️Если вам требуется указать в строке сообщения какой-либо аргумент то обычно это делается форматированием строки
logging.info('New value is %s' % value)
Или любой другой доступный нам способlogging.info(f'New value is {value}')
logging.info(f'{value=}')
Кажется, всё логично, все так делают. Но нет, это ошибка! 😫Функция записи сообщения должна быть очень быстрой. Да, она в любом случае занимает время, но чем меньше тем лучше. И особенно, когда это сообщение не проходит по фильтру уровня логирования.
Например, у меня установлен уровень WARNING и выполняется вот такой вызов
logging.debug(f'Current user: {user}')
Что произойдет? Сообщение не попадает под установленный уровень логирования и будет проигнорировано. Это обрабатывается сразу же первой командой в вызываемой функции debug. Но при этом форматирование строки всё равно произойдёт!
И проблема не в самом форматировании, которое достаточно быстрое (даже при складывании строк через "+"), а в тех возможных действиях, которые придется вызвать для преобразования объекта user в строку.
Возможно, там будет запрос в БД, разбор больших массивов данных или еще что-то не очень быстрое (или не очень умное🤪).
Нам всё это придётся посчитать чтобы потом.....ничего с этим не сделать.
Поэтому правильно писать так:
logging.debug('Current user: %s', user)
Мы просто передаём подготовленную неформатированную строку и аргументы для форматирования, это не требует вычислений. Но само форматирование и сопутствующие вызовы произойдут только в случае когда это действительно потребуется, то есть уровень сообщения попадает под условия настройки текущего логгера.#libs #tricks
Python Заметки
В модуле logging предусмотрен немного необычный способ форматирования строки без форматирования. logging.info('Message %s %s', arg1, arg2) На самом деле, если вы его не используете то вы делаете неправильно!⚠️ Если вам требуется указать в строке сообщения…
Кстати, если решите на каком-нибудь рабочем проекте принять эту хорошую практику и пресечь такие ошибки в будущем, то нужна автоматизация. Потому что договорённости на словах обязательно забудутся.
Вот такой плагин для
#flake8
Вот такой плагин для
flake8
есть: https://github.com/globality-corp/flake8-logging-format#flake8
GitHub
GitHub - globality-corp/flake8-logging-format: Flake8 extension to validate (lack of) logging format strings
Flake8 extension to validate (lack of) logging format strings - globality-corp/flake8-logging-format
JetBrains Fleet — a lightweight editor but with a twist!
Вы посмотрите какая красота. Похоже, JetBrains вдохновились VSCode, учли все те проблемы, с которыми они страдают в последнее время в своих полноценных тяжелых монолитных IDE, и запилили свой легковесный редактор.
Уже существует минимум три способа, чтобы работать в IDE удаленно — CodeWithMe, Projector, Remote Development. И вот теперь есть ещё и четвертая альтернатива. Походу, JetBrains отчаянно пытается решить проблемы, которые порождены монолитностью их IDE (фронтенд и бэкенд нельзя/сложно отделить друг от друга). Возможно, другие попытки лишь отчасти решают проблему, поэтому JetBrains пилят новый редактор с нуля 🤔
Fleet уже поддерживает 7 популярных языков, в том числе и Python, конечно. Скоро добавят ещё языков.
Интересно за этим понаблюдать. Записался на превью (EAP).
https://blog.jetbrains.com/blog/2021/11/29/welcome-to-fleet/
#jetbrains
Вы посмотрите какая красота. Похоже, JetBrains вдохновились VSCode, учли все те проблемы, с которыми они страдают в последнее время в своих полноценных тяжелых монолитных IDE, и запилили свой легковесный редактор.
Уже существует минимум три способа, чтобы работать в IDE удаленно — CodeWithMe, Projector, Remote Development. И вот теперь есть ещё и четвертая альтернатива. Походу, JetBrains отчаянно пытается решить проблемы, которые порождены монолитностью их IDE (фронтенд и бэкенд нельзя/сложно отделить друг от друга). Возможно, другие попытки лишь отчасти решают проблему, поэтому JetBrains пилят новый редактор с нуля 🤔
Fleet уже поддерживает 7 популярных языков, в том числе и Python, конечно. Скоро добавят ещё языков.
Интересно за этим понаблюдать. Записался на превью (EAP).
https://blog.jetbrains.com/blog/2021/11/29/welcome-to-fleet/
#jetbrains
The JetBrains Blog
Welcome to Fleet! | The JetBrains Blog
Update (Dec 3, 2021): We’ve received an overwhelming number of requests for the Fleet Early Preview program. Unfortunately we can't accept any new requests, but we will continue sending invites to tho
Python Daily
Introducing PyCharm 2021.3! #jetbrains #pycharm #nothabr #news #releases #newsletter
Добавили поддержку
poetry
, какие-то интеграции с FastAPI.This media is not supported in your browser
VIEW IN TELEGRAM
"Imagine if I have an error 404 or something"
Это Pablo Galindo Salgado переименовывал ветку
https://twitter.com/pyblogsal/status/1389559682159808518?s=20
Это Pablo Galindo Salgado переименовывал ветку
master
в main
в репозитории CPython, и довёл гитхаб до приступа.https://twitter.com/pyblogsal/status/1389559682159808518?s=20
В Microsoft Store появился Python 3.10, так что можно прям в винде накликать себе свежий питон через встроенный магазин приложений.
Пользуется ли этим кто-нибудь?
https://www.microsoft.com/en-us/p/python-310/9pjpw5ldxlz5?rtc=1&activetab=pivot:overviewtab
Пользуется ли этим кто-нибудь?
https://www.microsoft.com/en-us/p/python-310/9pjpw5ldxlz5?rtc=1&activetab=pivot:overviewtab
Microsoft
Get Python 3.10 from the Microsoft Store
Python is an easy to learn, powerful programming language. It has efficient high-level data structures and a simple but effective approach to object-oriented programming. Python’s elegant syntax and dynamic typing, together with its interpreted nature, make…
Ну все, теперь точно можно обновляться до 3.10, потому что уже выпустили первый багфикс релиз. От версии с 1 или больше на конце уже можно ожидать какой-то надежности. Все самые очевидные грабли уже потоптаны. Да и большинство либ к этому моменту уже тоже должно было адаптироваться, так что обязательно попробуйте обновиться.
Анонс: https://pythoninsider.blogspot.com/2021/12/python-3101-is-available.html
Список изменений: https://docs.python.org/3/whatsnew/changelog.html#python-3-10-1-final
Анонс: https://pythoninsider.blogspot.com/2021/12/python-3101-is-available.html
Список изменений: https://docs.python.org/3/whatsnew/changelog.html#python-3-10-1-final
Blogspot
Python Insider: Python 3.10.1 is available
Forwarded from DevBrain
Всем привет! Состоялся релиз Django 4.0💥 https://www.djangoproject.com/weblog/2021/dec/07/django-40-released/
💩1