
Roman
25.09.2018
05:02:13

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

Roman
25.09.2018
06:26:56

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
?

Алексей
25.09.2018
06:52:37

Ilia
25.09.2018
07:25:26

Roman
25.09.2018
07:29:08

Sergey
25.09.2018
07:33:26

Roman
25.09.2018
07:39:42

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

Roman
25.09.2018
09:30:38

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

Sergey
25.09.2018
09:31:39

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

Google

Roman
25.09.2018
09:33:06

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

Roman
25.09.2018
09:39:08

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

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

Alexey
25.09.2018
10:37:13

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

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

Serge
25.09.2018
22:11:08

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

Serge
25.09.2018
22:18:02

Roman
25.09.2018
22:18:38

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

Eugene
25.09.2018
23:03:13

Roman
25.09.2018
23:11:40

Danil
26.09.2018
05:27:14

Google

Andrey
26.09.2018
06:04:07

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

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

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

Марат
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,)
Очень затейливо они сделали, конечно. Казалось бы, кому надо {} в строке формата? Там то как раз можно обойтись единым синтаксисом.

Serge
26.09.2018
07:06:37

Eugene
26.09.2018
07:07:32

Serge
26.09.2018
07:08:13

Eugene
26.09.2018
07:20:11
Мне ещё в 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, а в остальных случаях хочу.


Valery
26.09.2018
08:24:52
Мне ещё в 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

Valery
26.09.2018
08:36:25

Eugene
26.09.2018
08:39:32