
Tengo un script de Python con cálculos. Hubo un ciclo de aproximadamente 2000 iteraciones, cada una de las cuales se consideró unos minutos.
Y decidí depurar inteligentemente ese script, mostrar un gráfico de algunas métricas del número de iteración. Y a medida que se calcula la próxima iteración, así se programa y actualiza.
La forma más fácil de hacerlo es con
bokeh. Más precisamente, usando un servidor bokeh para dibujar gráficos. Cómo, ahora te lo diré.
Primero, inicie el servidor: el servidor sale de la caja junto con el propio bokeh, así que después de instalar pip bokeh, simplemente escriba bokeh serve en la consola y se iniciará el servidor.
¿Por qué es necesario? Y luego para mostrar los gráficos
- no bloqueó la ejecución del resto del código (porque sucede en el navegador, en un proceso separado),
- para que el gráfico responda al cambio de tamaño de la ventana (o para minimizar-maximizar)
- y para que en cualquier momento podamos cambiar este horario como queramos, ¡directamente desde nuestro proceso de Python!
Esto se hace así:
import time import sys from bokeh.plotting import figure from bokeh.client import pull_session from bokeh.models import ColumnDataSource
Anteriormente, también tenía que hacer esto, pero las decisiones anteriores eran, por decirlo suavemente, no tan buenas. Lo que no he probado en mi vida ...
¡Cuidado, lastre cerebral!Puede usar matplotlib en modo sin bloqueo tirando manualmente de plt.draw () en cada iteración. Es cierto que matplotlib no tiene su propio procesamiento de mensajes desde la GUI en modo sin bloqueo, y si la ventana se minimiza o cierra con otra ventana, debemos esperar a la próxima iteración para volver a dibujarla. Más o menos muleta, pero para la depuración será suficiente.
En Negro es posible generar una imagen con un gráfico de la misma matplotlib y volcarla en el disco. También una muleta feroz, pero un paseo por la falta de peces. O en una máquina remota sin gráficos.
Puede hacerlo de una manera genial: use PyQt, envuelva el código de cálculo en un QObject, introdúzcalo en una secuencia separada, envuelva los gráficos matplotlib en un QWidget (o use los gráficos de Qt Data Visualizaion, o de PyQtGraph), conecte las matemáticas a los gráficos a través de una señal con una ranura , y habrá felicidad. Es cierto, esto es un poco como una solución de depuración rápida, y Qt necesita ser enseñado, pero lo hice un par de veces.
Puede generar una pequeña aplicación de servidor para dibujar gráficos en un proceso separado (por ejemplo, usando aiohttp + PyQt + PyQtGraph), que se puede eliminar a través de la API REST desde el proceso principal. Una vez que hice esto, pero tampoco atrajo la reparación rápida para la depuración.
Puedes escribir en algún tipo de base de datos (¿qué está de moda en este momento?), Y luego dejar que Grafan se ponga de moda. Es cierto que debe colocar la base de datos y Grafan, configurarlas y, en general, molestarse en escribir en la base de datos. Probablemente, también es posible a través de un archivo, pero para dos gráficos de mil puntos cada uno es como un gorrión ...
O puede comprender plotly.dash, coloque las matemáticas en una secuencia separada, envuélvalas en una aplicación de tablero y haga un montón de basura. Esto no lo he dominado, aunque sería necesario.
En resumen, depuración exitosa!