web-dev-qa-db-fra.com

RuntimeError: le thread principal n'est pas en boucle principale avec Matplotlib et Flask

J'utilise flask, matplotlib pour enregistrer l'image et tensorflow pour créer une session. Je reçois l'erreur ci-dessus lorsque je lance le code suivant. La route du flacon est-elle exécutée sur un fil séparé? Comment faire pour que morceau de code fig.saveFig soit exécuté sur le thread principal. Merci beaucoup

 @app.route('/open', methods = ['GET', 'POST'])
 def sendOutput():
     global loss,a2,xP,yP,scale,sess,fig
     test_X,test_Y = own_model.getEvaluateData(scale)
     cost,ans = sess.run([loss,a2],feed_dict={xP:test_X,yP:test_Y})
     d = np.array(ans) - np.array(test_Y)
     val = hist(d,100)
     sess.close()
     fig.saveFig('abc.png') //Errror on this line
5
Mihir Prabhudesai

J'étais dans la même situation, Flask avec Matplotlib combo. Ce qui a fonctionné pour moi est de spécifier Agg comme backend de Matplotlib.

import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt

# Your code here

Vous pouvez vous reporter à la documentation de Matplotlib (Matplotlib dans un serveur d'applications Web) pour plus de détails.

8
CpK

apparemment, c'est un problème avec TKinter. Votre message d'erreur complet n'est pas posté (vous devriez vraiment le faire), mais je travaille sur quelque chose de très similaire, je suis donc à 99,9% que votre problème est le même que le mien. Je construis une application avec tensorflow, flask, blah blah. Je reçois la même erreur, par intermittence (parfois cela fonctionne). Voici quelques liens vers des questions similaires. J'espère que ça aide! Je pense que ma solution s'éloignera de matplotlib. 

1
squalor