【问题标题】:RuntimeError: main thread is not in main loop with Matplotlib and FlaskRuntimeError:主线程不在 Matplotlib 和 Flask 的主循环中
【发布时间】:2018-09-29 23:53:05
【问题描述】:

我正在使用烧瓶、matplotlib 来保存图像和 tensorflow 来创建会话。运行以下代码时出现上述错误。烧瓶路线是否在单独的线程上运行?如何使 fig.saveFig 一段代码在主线程上运行。非常感谢

 @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

【问题讨论】:

    标签: multithreading matplotlib tensorflow flask


    【解决方案1】:

    我遇到了同样的情况,Flask 和 Matplotlib 组合。 对我有用的是将 Agg 指定为 Matplotlib 后端。

    import matplotlib
    matplotlib.use('Agg')
    import matplotlib.pyplot as plt
    
    # Your code here
    

    详情可以参考 Matplotlib 文档(Web 应用服务器中的 Matplotlib)。

    【讨论】:

    • 请注意,您需要将此代码放在 任何其他导入之前,这些导入可能已经在导入 matplotlib 或设置 Tkinter 后端。
    • 这就像一个魅力,顺便说一句,Agg 实际上是做什么的?
    • 您好,谢谢您的回答。我的代码现在可以工作,但我仍然收到警告用户警告:在主线程之外启动 Matplotlib GUI 可能会失败。您知道我可以做些什么来避免收到此警告吗?
    【解决方案2】:

    显然这是 TKinter 的问题。你没有发布完整的错误信息(你真的应该这样做),但我正在做一些非常相似的事情,所以我有 99.9% 的把握你的问题和我的一样。我正在用 tensorflow、flask、blah blah 构建一个应用程序。我间歇性地收到同样的错误(有时它有效)。这里有一些类似问题的链接。我希望这有帮助!我认为我的解决方案将远离 matplotlib。

    【讨论】:

      猜你喜欢
      • 2019-03-21
      • 1970-01-01
      • 2013-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-16
      相关资源
      最近更新 更多