2017-09-07 9 views
0

私は、Python 3を使用して、次のHelloWorldプロジェクトを持っているし、2 matplotlibの画像を提供していますCherryPyに:cherrypyから複数のmatplotlibイメージを提供するには?

import cherrypy 
import matplotlib.pyplot as plt 
import numpy as np 

from io import BytesIO 


class HelloWorld(object): 
    @cherrypy.expose 
    def index(self): 
     output = """ 
     Hello World! 
     <img src="image1.png" width="640", height="480" border="0" /> 

     <img src="image2.png" width="640", height="480" border="0" /> 
     """ 
     return output 

    @cherrypy.expose 
    def image1_png(self): 
     img = BytesIO() 
     self.plot(img) 
     img.seek(0) 
     retobj = cherrypy.lib.static.serve_fileobj(img, content_type='png', name='image1.png') 
     return retobj 

    @cherrypy.expose 
    def image2_png(self): 
     img = BytesIO() 
     self.plot(img) 
     img.seek(0) 
     retobj = cherrypy.lib.static.serve_fileobj(img, content_type='png', name='image2.png') 
     return retobj 

    def plot(self, image): 
     sampleData = np.random.normal(size=100) 
     plt.hist(sampleData) 
     plt.savefig(image, format='png') 

if __name__ == '__main__': 
    cherrypy.quickstart(HelloWorld()) 

は(他の1をコメントアウトすることによって)画像を1つだけの呼び出しは完全に正常に動作しますが、呼び出しの両方ません作業。どのようにこれを修正するための任意のアイデア?

答えて

0

これは、matplotlibバックエンドtkinterのスレッドに関する問題です。 matplotlib.use('agg')によってバックエンドを手動で変更しました。そのスニペットは、matplotlib.pyplotをインポートする前に配置する必要があります。

関連する問題