Tensorflow hace que los mensajes de registro se dupliquen

Así que estaba jugando con la biblioteca Tensorflow de Google que publicaron ayer y encontré un error molesto que me sigue mordiendo.

Lo que hice fue configurar las funciones de registro de Python como normalmente lo hago, y el resultado fue que, si importaba la biblioteca tensorflow, todos los mensajes en la consola empezaron a duplicarse. Curiosamente, esto no sucede si solo utiliza la función logging.warn/info/..() .

Un ejemplo de un código que no duplica los mensajes:

 import tensorflow as tf import logging logging.warn('test') 

Un ejemplo de un código que duplica todos los mensajes:

 import tensorflow as tf import logging logger = logging.getLogger('TEST') ch = logging.StreamHandler() logger.addHandler(ch) logger.warn('test') 

Ahora, soy un hombre sencillo. Me gusta la funcionalidad de logging , así que la uso. La configuración con el objeto de logger y la adición de un StreamHandler es algo que StreamHandler viendo cómo otras personas hicieron esto, pero parece que encaja con la forma en que estaba destinado a ser utilizado. Sin embargo, no tengo un conocimiento profundo de la biblioteca de registro, ya que siempre funcionó.

Por lo tanto, cualquier ayuda que explique por qué ocurre la duplicación de los mensajes será más útil.

Estoy usando Ubuntu 14.04.3 LTS con Python 2.7.6, pero el error ocurre en todas las versiones de Python 2.7 que probé.

Obtengo esta salida:

 test WARNING:TEST:test 

Tensorflow también utiliza el marco de registro y ha configurado sus propios controladores, de modo que cuando inicia sesión, de forma predeterminada, se propaga a los controladores de registro principales dentro de tensorflow. Puedes cambiar este comportamiento configurando:

 logger.propagate = False 

Vea también la salida duplicada en la configuración de registro de python simple

Seguimiento: este fue un efecto secundario no deseado de la forma en que tensorflow usaba el paquete de registro. Lo he cambiado en HEAD para que scope sus registradores internos con el nombre de “tensorflow” para evitar esta contaminación. Debe estar en la cabeza github dentro de un día o así. Mientras tanto, la solución logger.propagate funcionará y no se romperá una vez que se solucione, por lo que debería estar seguro de hacerlo. ¡Gracias de nuevo por ver esto!