Как полностью отключить дорогостоящие задачи регистрации в Python - PullRequest
0 голосов
/ 24 июня 2018

Функция Python pprint , которую я использую для регистрации словарей, довольно медленная для больших объектов.Я не могу найти способ полностью отключить обработку этой функции с помощью стандартной библиотеки журналов.Запустите приведенный ниже код в качестве примера:

logging.disable(50)
logging.log(msg=sum(range(20000000)), level=0)

Несмотря на то, что результат не обнаружился, сумма все еще была определенно вычислена (проверьте число внутри диапазона , чтобы увидеть, что яимею в виду).Есть ли в модуле регистрации стандартный способ полностью отключить вычисления?Если нет, приветствуются и другие предложения.

1 Ответ

0 голосов
/ 24 июня 2018

проблема в том, что все, что находится на корневом уровне (включая аргументы в функцию, а не внутреннюю часть функции), вычисляется, как только Python увидит это (то есть вычислено до того, как python когда-либо вызовет журнал функция) ... чтобы решить эту проблему, вы можете поместить свою логику в функцию ... и затем выполнять логику, только если это уместно

def lazy_log(callable_fn,log_name,log_level):
    logger = logging.getLogger(log_name)
    if logger.getEffectiveLevel() > log_level:
        return
    logger.log(msg=str(callable_fn()),level=log_level)

Я думаю, может сработать для вас

lazy_log(lambda : sum(range(1000000)), None, 51)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...