Интересный побочный эффект принесло одно из изменений в 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
Ура, товарищи! Достигнута очередная большая веха в развитии канала!
Во-первых, на канале уже 700+ читателей. Я раньше и подумать не мог, что кому-то может быть интересно читать мои потоки мыслей вперемешку со всякими статьями и ссылками, которые я нахожу занятными. Мне приятно. А если вы ещё и пишете комменты, то я вообще в восторге. Всегда рад пообщаться обо всем, что связано с моим любимым ЯП. Спасибо! ❤️
Во-вторых, на канал в комменты наконец-то пришли спамеры! Расцениваю это как отметку качества. Наконец-то они признали существование канала. Чтож, я ждал вас, механические ублюдки. Надо настроить бота, чтобы чистил комменты.
Во-первых, на канале уже 700+ читателей. Я раньше и подумать не мог, что кому-то может быть интересно читать мои потоки мыслей вперемешку со всякими статьями и ссылками, которые я нахожу занятными. Мне приятно. А если вы ещё и пишете комменты, то я вообще в восторге. Всегда рад пообщаться обо всем, что связано с моим любимым ЯП. Спасибо! ❤️
Во-вторых, на канал в комменты наконец-то пришли спамеры! Расцениваю это как отметку качества. Наконец-то они признали существование канала. Чтож, я ждал вас, механические ублюдки. Надо настроить бота, чтобы чистил комменты.
Forwarded from Python Daily
Если вы хотели попробовать сделать свою игру - вот список видео (+ бонус) с которых можно начать знакомство с pygame:
Введение: The ultimate introduction to Pygame
Тут объяснят основы: отрисовка изображений, позиционирование, коллизии, передвижение, анимации и т.д.
Большая и подробная серия видео про разработку платформера: Mario in Python with Pygame (and pirates)
Продолжение предыдущего ролика, которое объясняет такие вещи как: передвижение камеры, создание уровня в редакторе карт, глобальная карта локаций, UI и т.д.
Как работать с координатами в изометрических играх:
Introduction to Isometric Movement in Games
How Isometric Coordinates Work in 2D games
Основы создания тайлов для изометрических игр:
Pixel Art Class - Isometric Tile Basics!
Pixel Art Class - Isometric Character Basics
БОНУС
Огромный список примеров реализации разных механик и проблем: PyGame Examples and Answers
#pygame #gamedev #pydaily #nothabr
Введение: The ultimate introduction to Pygame
Тут объяснят основы: отрисовка изображений, позиционирование, коллизии, передвижение, анимации и т.д.
Большая и подробная серия видео про разработку платформера: Mario in Python with Pygame (and pirates)
Продолжение предыдущего ролика, которое объясняет такие вещи как: передвижение камеры, создание уровня в редакторе карт, глобальная карта локаций, UI и т.д.
Как работать с координатами в изометрических играх:
Introduction to Isometric Movement in Games
How Isometric Coordinates Work in 2D games
Основы создания тайлов для изометрических игр:
Pixel Art Class - Isometric Tile Basics!
Pixel Art Class - Isometric Character Basics
БОНУС
Огромный список примеров реализации разных механик и проблем: PyGame Examples and Answers
#pygame #gamedev #pydaily #nothabr
Forwarded from Podlodka Podcast – анонсы и новости подкаста про IT (Podlodka Bot)
🔥 В 10:00 приходите на лайвкодинг во Fleet!
📹 «Лайвкодинг во Fleet, новой IDE от JetBrains»
Посмотрим на автодополнение, рефакторинг и анализ кода.
Попробуем написать код в несколько рук.
Испытаем IDE типовым проектом на Spring Boot.
📹 «Лайвкодинг во Fleet, новой IDE от JetBrains»
Посмотрим на автодополнение, рефакторинг и анализ кода.
Попробуем написать код в несколько рук.
Испытаем IDE типовым проектом на Spring Boot.
Не про Python, но мы же все интересуемся новыми IDE. Через 40 минут начало стрима с лайвкодингом в JetBrains Fleet!
#jetbrains
#jetbrains
Давайте на мгновение перестанем деградировать и почтим Python 3.6 минутой молчания. Это был хороший релиз, который принёс нам f-строки. Пожалуй, тот самый релиз, который многих заставил наконец обновиться с Python 2. Покойся с миром!
Нет, серьезно. Больше в 3.6 не будут исправляться даже проблемы безопасности. Вот представьте, что там найдётся что-то вроде нашумевшей джавовой уязвимости log4shell (а рано или поздно такое обязательно находится везде, ведь не бывает кода без проблем), и вы рискуете остаться с этим один на один. Мейнтейнеры питона пофиксят свежие версии, а 3.6 так и останется уязвимым. Так что если вы до сих пор используете 3.6, то крайне рекомендую обновиться раньше, чем к вам пришла беда.
По данным из PyPI stats, 15% загрузок все ещё происходят с 3.6. Вот не будьте такими. Лучше будьте как 1,5%, которые уже обновились до Python 3.10!
Хорошая статья по теме: https://pythonspeed.com/articles/stop-using-python-3.6/
Нет, серьезно. Больше в 3.6 не будут исправляться даже проблемы безопасности. Вот представьте, что там найдётся что-то вроде нашумевшей джавовой уязвимости log4shell (а рано или поздно такое обязательно находится везде, ведь не бывает кода без проблем), и вы рискуете остаться с этим один на один. Мейнтейнеры питона пофиксят свежие версии, а 3.6 так и останется уязвимым. Так что если вы до сих пор используете 3.6, то крайне рекомендую обновиться раньше, чем к вам пришла беда.
По данным из PyPI stats, 15% загрузок все ещё происходят с 3.6. Вот не будьте такими. Лучше будьте как 1,5%, которые уже обновились до Python 3.10!
Хорошая статья по теме: https://pythonspeed.com/articles/stop-using-python-3.6/
Python⇒Speed
It’s time to stop using Python 3.8
Python 3.8 will stop getting security updates in November 2024. You really should upgrade!
Пользуясь случаем напоминаю, что 3.7 и 3.8 сейчас находятся на этапе security fixes only. То есть, если вы хотите, чтобы в вашем питоне исправлялись всякие баги с неправильным поведением и падениями, то вам нужно быть как минимум на 3.9.
Вот хорошая диаграмма, визуализирующая время жизни разных версий интерпретатора: https://python-release-cycle.glitch.me/
Вот хорошая диаграмма, визуализирующая время жизни разных версий интерпретатора: https://python-release-cycle.glitch.me/
👍1🔥1