在構建基于 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(&#