@spbpython

Страница 773 из 785
Sergey
25.09.2018
06:16:20
Ну чтобы про вещи типа метаклассов, дескрипторов, gc, наследования и тд было бы поподробнее описано.

Roman
25.09.2018
06:26:56
Ну чтобы про вещи типа метаклассов, дескрипторов, gc, наследования и тд было бы поподробнее описано.
"Python. К вершинам мастерства" Лучано Рамальо. В этой книге будет все описанное кроме gc.

Michael
25.09.2018
06:29:47
GC шепедева читай и gc handbook - только это не про питон

Google
Michael
25.09.2018
06:31:00
Есть еще книга про gc: The Garbage Collection Handbook The Art of Automatic Memory Management

Roman
25.09.2018
06:46:02
Самое обидное, что эти книги не помогают выпускать качественный продукт в срок :D

Vitali K.
25.09.2018
06:51:59
?

Ilia
25.09.2018
07:25:26
Ничто не помогает...
Помогает кое что . ...

Sergey
25.09.2018
07:33:26
А что там описывать в gc с подсчётом ссылок?
Ну gc это не только подсчет ссылок

Roman
25.09.2018
07:39:42
Sergey
25.09.2018
09:28:23
а что еще?
Строго говоря подсчет ссылок это воообще не gc. Когда я написал что в книге должна быть инфа по gc имелось ввиду, что должна быть информация по управлению памятью впринципе.

Марат
25.09.2018
09:31:28
Что значит подсчет ссылок? Incref/decref?

Sergey
25.09.2018
09:31:39
Ну вот да. Но в cpython только подсчет ссылок.
Ну нет же, не только подсчет

Марат
25.09.2018
09:32:42
+

Google
Roman
25.09.2018
09:33:06
Aleksey
25.09.2018
09:34:01
Подсчет ссылок не спасет при циклических ссылках. Так что есть и поколения

Павел
25.09.2018
09:40:47
The Garbage Collection Handbook — хорошая книжка, библиография на 130 страниц

Roman
25.09.2018
09:43:00
а как вы своём коде делаете красивые log messages?

Stepan
25.09.2018
13:05:13
ну в общем я отказался от подавления логов одного из реквестов, все равно профайлинг выключать

Danil
25.09.2018
13:06:37
Было бы ещё хорошо научиться читать описание групп. У меня пока интернет шальной можете исправить ) минут через 5 исправлю сам

Serge
25.09.2018
22:11:08
а как вы своём коде делаете красивые log messages?
Рома, есть такой пакет logging. Мало кто умеет, но многие используют. Так вот, там есть форматтеры и тонкая настройка от кого и какой уровень каким форматтером куда писать. У меня всё;)

Roman
25.09.2018
22:16:27
Тут хорошо зашли бы f-strings

Roman
25.09.2018
22:18:38
Последнее время f-строки в log.LEVEL
Но я очень не хочу f-strings ;)

Serge
25.09.2018
22:18:52
log = logging.get_logger(__name__) В начале модуля

Но я очень не хочу f-strings ;)
Ты уж определись

Но я очень не хочу f-strings ;)
По большому счету по фигу. Твое дело отдать сообщение. Как ты это сделаешь - подробности реализации

Eugene
25.09.2018
23:03:13
По большому счету по фигу. Твое дело отдать сообщение. Как ты это сделаешь - подробности реализации
Человек про то, что ему не нравится как выглядит код с логгированием. Я так понял.

Danil
26.09.2018
05:27:14
Прошло больше пяти минут:) Я забанил.
Спасибо , а то у меня Интернет по расписанию и не всегда ожидаемому ))

Google
Andrey
26.09.2018
06:04:07
Но я очень не хочу f-strings ;)
Ну можно по классике logger.debug("Job %s terminated by user %s with reason %s", job_id, username, reason)

Eugene
26.09.2018
06:25:44
Ну можно по классике logger.debug("Job %s terminated by user %s with reason %s", job_id, username, reason)
И это единственно верный способ писать в лог, если используется модуль logging.

Мне не понятно только, почему до сих пор модуль logging не поддерживает форматирование в стиле format через {}. logger.info('hello {name}', name=petya)

Марат
26.09.2018
06:31:21
Чот я не въехал, а зощем, если есть format?

Eugene
26.09.2018
06:31:59
Чот я не въехал, а зощем, если есть format?
100500 раз об этом уже говорили, мне лень объяснять... может кто-нибудь другой расскажет

Если кратко, то во-первых, дополнительный оверхед на форматирование, даже если сообщения с этого уровня логгирования фильтруются (не выводятся), во-вторых, всякие тулы, которые собирают логи, начинают тупить.

Марат
26.09.2018
06:40:38
Разумно, спасибо. Тогда возможно синтаксиса с {} нет потому что обратная совместимость, где-то могут быть строки с {}, которые не предполагается заменять на аргумент. Хотя, думаю, это не большая проблема.

Eugene
26.09.2018
06:42:27
Скорее всего да, есть подводные камни обратной совместимости. Видимо, чтобы ничего не сломать оставили архаичный синтаксис форматирования. Работает — не трогай. :)

Maxim
26.09.2018
06:47:21
The style parameter can be one of ‘%’, ‘{‘ or ‘$’ and determines how the format string will be merged with its data: using one of %-formatting, str.format() or string.Template. See Using particular formatting styles throughout your application for more information on using {- and $-formatting for log messages. Changed in version 3.2: The style parameter was added.

Как нет, если есть

Admin
ERROR: S client not available

Maxim
26.09.2018
06:47:45
Это параметр конструктора formatter

Eugene
26.09.2018
06:49:58
Это не про то

Это про параметризацию форматтера, а не про форматирование сообщений

Maxim
26.09.2018
06:51:12
Разве? Я так понимаю если сделать style='{', то форматтер будет обрабатывать лог мессаджи через str.format

Eugene
26.09.2018
06:52:10
Попробуй :) Это вот про это FORMAT = '%(asctime)-15s %(clientip)s %(user)-8s %(message)s' logging.basicConfig(format=FORMAT) FORMAT = '{asctime} {clientip} {user} {message}' logging.basicConfig(format=FORMAT)

Maxim
26.09.2018
06:52:47
А мы разве не про это говорим?

А, подожди

Я думал это и на то, и на другое влияет

Eugene
26.09.2018
06:53:30
К сожалению, не влияет на форматирование сообщений

Google
Eugene
26.09.2018
06:53:38
Я тоже был удивлён

Maxim
26.09.2018
06:54:33
Печаль

Eugene
26.09.2018
07:00:58
Печаль
Ага. Ну то есть если ты задашь форматтер как-то так: f = logging.Formatter('%(asctime)-15s %(clientip)s %(user)-8s %(message)s', style='{') То твой логгер перестанет подставлять параметры. и В любом случае будет ругаться на {} в строке сообщения. logger.error('hello') ERROR:root:hello %(asctime)-15s %(clientip)s %(user)-8s %(message)s logger.error('hello {}', 45) --- Logging error --- Message: 'hello {}' Arguments: (45,) Очень затейливо они сделали, конечно. Казалось бы, кому надо {} в строке формата? Там то как раз можно обойтись единым синтаксисом.

Eugene
26.09.2018
07:07:32
Имхо f-строки достаточно быстрые, чтобы не париться за фильтрацию лишних логов
Может я там вывожу кастомный класс, в котором метод __str__ работает 10 секунд ?

Serge
26.09.2018
07:08:13
Может я там вывожу кастомный класс, в котором метод __str__ работает 10 секунд ?
Ну и это подпадает под определение "стало узким местом"

Eugene
26.09.2018
07:20:11
И тебе ещё тут не оторвали? Нереальная ситуация:)
Я такое не писал, но видел. Там было, конечно, не 10 секунд, но секунду точно. Адово, конечно, но всякое бывает. :)

Мне ещё в logging не хватает управления логами на уровне контекста, ну, например, как-то так: with logging.level(logging.WARNING): requests.post(url, data=data) или with logging.level('urllib3', logging.WARNING): requests.post(url, data=data) Это если я не хочу, скажем, видеть debug-логов из urllib3 при вызове requests.post, а в остальных случаях хочу.

Eugene
26.09.2018
08:30:17
Там была какая-то тонкая настройка по источникам, можно настраивать уровень логирования, филтры, направления и т. п.
Да, там можно целый конфиг написать, но я сейчас просто в таком случае делаю так: logging.getLogger("urllib3").setLevel(logging.WARNING) А хотелось бы как с warnings: with warnings.catch_warnings(): warnings.simplefilter("ignore") requests.post(url, data=data, verify=False)

Valery
26.09.2018
08:36:25
Да, там можно целый конфиг написать, но я сейчас просто в таком случае делаю так: logging.getLogger("urllib3").setLevel(logging.WARNING) А хотелось бы как с warnings: with warnings.catch_warnings(): warnings.simplefilter("ignore") requests.post(url, data=data, verify=False)
Я понимаю, что кейсы все разные, но побуду КО и скажу, что логирование таки лучше настраивать в едином конфиге, а не в разных местах в коде.

Eugene
26.09.2018
08:39:32
Я понимаю, что кейсы все разные, но побуду КО и скажу, что логирование таки лучше настраивать в едином конфиге, а не в разных местах в коде.
Это разумно и логично для логгирования конкретно твоего приложения, но если туда пролезают всякие ненужные логи из библиотек, бывает, что хочется их задавить в конкретном месте. Но может это и плохо, не знаю, нужно больше опыта.

Страница 773 из 785