我正在為我的腳本使用內置的 Python“日志記錄”模塊。當我將詳細程度變為“資訊”時,似乎我的“除錯”訊息顯著減慢了我的腳本。
我的一些“除錯”訊息列印大字典,我猜 Python 在實作“除錯”訊息被禁用之前擴展文本。例子:
import pprint
pp = pprint.PrettyPrinter(indent=4)
logger.debug(f"Large Dict Object: {pp.pformat(obj)}")
我怎樣才能提高我的表現?我更喜歡仍然使用 Python 的內置日志記錄模塊。但是需要想出一個“干凈”的方法來解決這個問題。
uj5u.com熱心網友回復:
上面提到的功能已經有了dankal444日志記錄功能,稍微簡潔一些:
if logger.isEnabledFor(logging.DEBUG):
logger.debug(f"Large Dict Object: {pp.pformact(obj)}")
另一種可能的方法是使用 %-formatting,它只在實際需要時進行格式化(日志事件必須由處理程式和記錄器處理才能到達該點)。我知道 f-strings 是新的(ish)熱點并且是高性能的,但這一切都取決于確切的情況,即哪個會提供最好的結果。
uj5u.com熱心網友回復:
檢查當前級別是否足夠好:
if logger.getEffectiveLevel() <= logging.DEBUG:
logger.debug(f"Large Dict Object: {pp.pformact(obj)}")
這不是超級干凈,但我能想到的最好的。如果性能瓶頸,你只需要包含這個
uj5u.com熱心網友回復:
我無法驗證您的瓶頸在哪里,但如果是因為 pprint 庫,您的記錄器將永遠沒有機會對此做任何事情。重寫以澄清。
from pprint import PrettyPrinter
import logging
logger = logging.getLogger()
large_object = {"very": "large container"}
pp = PrettyPrinter(indent=4)
# This is done first.
formatted_msg = pp.pformat(large_object)
# It's already formatted when it's sent to your logger.
logger.debug(f"Large dict object: {formatted_msg}")
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/413261.html
標籤:
