Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

381
Vistas
tqdm en Jupyter Notebook imprime nuevas barras de progreso repetidamente

Estoy usando tqdm para imprimir el progreso en un script que estoy ejecutando en un cuaderno Jupyter. Imprimo todos los mensajes en la consola a través tqdm.write() . Sin embargo, esto todavía me da una salida sesgada como esta:

ingrese la descripción de la imagen aquí

Es decir, cada vez que se tiene que imprimir una nueva línea, se imprime una nueva barra de progreso en la siguiente línea. Esto no sucede cuando ejecuto el script a través de la terminal. ¿Como puedo resolver esto?

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Intente usar tqdm.notebook.tqdm en lugar de tqdm , como se describe aquí .

Esto podría ser tan simple como cambiar su importación a:

from tqdm.notebook import tqdm

¡Buena suerte!

EDITAR: después de la prueba, parece que tqdm realmente funciona bien en 'modo de texto' en el cuaderno Jupyter. Es difícil saberlo porque no proporcionó un ejemplo mínimo , pero parece que su problema se debe a una declaración de impresión en cada iteración. La declaración de impresión genera un número (~ 0.89) entre cada actualización de la barra de estado, lo que está arruinando la salida. Intente eliminar la declaración de impresión.

over 4 years ago · Santiago Trujillo Denunciar

0

Esta es una respuesta alternativa para el caso en que tqdm_notebook no funcione para usted.

Dado el siguiente ejemplo:

 from time import sleep from tqdm import tqdm values = range(3) with tqdm(total=len(values)) as pbar: for i in values: pbar.write('processed: %d' %i) pbar.update(1) sleep(1)

El resultado se vería así (el progreso se mostraría en rojo):

 0%| | 0/3 [00:00<?, ?it/s] processed: 1 67%|██████▋ | 2/3 [00:01<00:00, 1.99it/s] processed: 2 100%|██████████| 3/3 [00:02<00:00, 1.53it/s] processed: 3

El problema es que la salida a stdout y stderr se procesan de forma asíncrona y por separado en términos de nuevas líneas.

Si dice que Jupyter recibe en stderr la primera línea y luego la salida "procesada" en stdout. Luego, una vez que recibe una salida en stderr para actualizar el progreso, no regresará y actualizará la primera línea, ya que solo actualizará la última línea. En su lugar, tendrá que escribir una nueva línea.

Solución 1, escribir en stdout

Una solución alternativa sería enviar ambos a stdout en su lugar:

 import sys from time import sleep from tqdm import tqdm values = range(3) with tqdm(total=len(values), file=sys.stdout) as pbar: for i in values: pbar.write('processed: %d' % (1 + i)) pbar.update(1) sleep(1)

La salida cambiará a (no más rojo):

 processed: 1 | 0/3 [00:00<?, ?it/s] processed: 2 | 0/3 [00:00<?, ?it/s] processed: 3 | 2/3 [00:01<00:00, 1.99it/s] 100%|██████████| 3/3 [00:02<00:00, 1.53it/s]

Aquí podemos ver que Jupyter no parece borrarse hasta el final de la línea. Podríamos agregar otra solución para eso agregando espacios. Como:

 import sys from time import sleep from tqdm import tqdm values = range(3) with tqdm(total=len(values), file=sys.stdout) as pbar: for i in values: pbar.write('processed: %d%s' % (1 + i, ' ' * 50)) pbar.update(1) sleep(1)

Lo que nos da:

 processed: 1 processed: 2 processed: 3 100%|██████████| 3/3 [00:02<00:00, 1.53it/s]

Solución alternativa 2, establezca la descripción en su lugar

En general, podría ser más sencillo no tener dos salidas, sino actualizar la descripción, por ejemplo:

 import sys from time import sleep from tqdm import tqdm values = range(3) with tqdm(total=len(values), file=sys.stdout) as pbar: for i in values: pbar.set_description('processed: %d' % (1 + i)) pbar.update(1) sleep(1)

Con la salida (descripción actualizada mientras se procesa):

 processed: 3: 100%|██████████| 3/3 [00:02<00:00, 1.53it/s]

Conclusión

En su mayoría, puede hacer que funcione bien con tqdm simple. Pero si tqdm_notebook funciona para ti, solo úsalo (pero entonces probablemente no hayas leído tanto).

over 4 years ago · Santiago Trujillo Denunciar

0

La mayoría de las respuestas están desactualizadas ahora. Mejor si importa tqdm correctamente.

 from tqdm import tqdm_notebook as tqdm 

ingrese la descripción de la imagen aquí

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda