在构建基于 Flask 的后端服务过程中,使用 matplotlib
绘图时,很多开发者会遇到一个经典的运行时错误:
RuntimeError: main thread is not in main loop
这通常出现在服务开启多线程时调用 matplotlib
,本文将从原理、解决方式到部署建议进行全面解析。
一、问题来源:matplotlib 与线程不兼容
在默认情况下,matplotlib
会尝试使用一个 GUI 后端(如 TkAgg),这些后端往往要求所有图形操作必须在主线程中完成。一旦在非主线程中调用,比如 Flask 的多线程请求处理逻辑,就可能触发上述异常。
复现示例
from flask import Flask
import matplotlib.pyplot as pltapp = Flask(__name__)@app.route('/plot')
def plot():plt.plot([1, 2, 3], [4, 5, 6])plt.savefig(&#