El OP pregunta por separar las matplotlib
parcelas. La mayoría de las respuestas asumen la ejecución del comando desde un intérprete de Python. El caso de uso presentado aquí es mi preferencia para probar el código en un terminal (por ejemplo, bash) donde file.py
se ejecuta a y desea que surjan los gráficos, pero el script de Python se complete y regrese a un símbolo del sistema.
Este archivo independiente se utiliza multiprocessing
para iniciar un proceso separado para trazar datos con matplotlib
. El hilo principal sale usando lo os._exit(1)
mencionado en esta publicación. Las os._exit()
fuerzas principales salen, pero deja el matplotlib
proceso hijo vivo y receptivo hasta que se cierra la ventana de la trama. Es un proceso completamente separado.
Este enfoque es un poco como una sesión de desarrollo de Matlab con ventanas de figura que aparecen con un símbolo del sistema receptivo. Con este enfoque, ha perdido todo contacto con el proceso de ventana de figura, pero está bien para el desarrollo y la depuración. Solo cierra la ventana y sigue probando.
multiprocessing
está diseñado para la ejecución de código solo en python, lo que lo hace quizás más adecuado que subprocess
. multiprocessing
es multiplataforma, por lo que debería funcionar bien en Windows o Mac con poco o ningún ajuste. No es necesario verificar el sistema operativo subyacente. Esto fue probado en Linux, Ubuntu 18.04LTS.
#!/usr/bin/python3
import time
import multiprocessing
import os
def plot_graph(data):
from matplotlib.pyplot import plot, draw, show
print("entered plot_graph()")
plot(data)
show() # this will block and remain a viable process as long as the figure window is open
print("exiting plot_graph() process")
if __name__ == "__main__":
print("starting __main__")
multiprocessing.Process(target=plot_graph, args=([1, 2, 3],)).start()
time.sleep(5)
print("exiting main")
os._exit(0) # this exits immediately with no cleanup or buffer flushing
Al ejecutar, file.py
aparece una ventana de figura, luego __main__
sale, pero la ventana de figura multiprocessing
+ matplotlib
sigue respondiendo con zoom, panorámica y otros botones porque es un proceso independiente.
Verifique los procesos en el símbolo del sistema bash con:
ps ax|grep -v grep |grep file.py
ion()
soluciona el problema.