Django 使用 matplotlib 遇到 RuntimeError: main thread is not in main loop 解决办法

背景

在 django 开发的接口服务中需要返回由 matplotlib 生成的图片,第一次页面请求接口正常,刷新页面后出现了以下异常导致服务崩溃,

python 复制代码
    if self._tk.getboolean(self._tk.call("info", "exists", self._name)):
RuntimeError: main thread is not in main loop

这个 RuntimeError: main thread is not in main loop 看起来是 matplotlib 的依赖 tinker 库出现的问题。

问题分析

通常是因为 matplotlib 默认会使用 GUI 后端,而 Django 是一个 Web 框架,在服务器端运行,没有 GUI 环境,且 matplotlib 的 GUI 后端在非主线程的上下文中使用时会出现问题。以下是解决该问题的详细步骤和方法:

matplotlib 默认使用的后端(如 TkAgg)依赖于 GUI 环境,而 Django 运行在服务器端,没有这样的环境。并且在 Django 中,代码执行的线程上下文与 matplotlib 的 GUI 后端不兼容,导致出现 main thread is not in main loop 错误。

解决办法

更改 matplotlib 的后端

将 matplotlib 的后端更改为非 GUI 后端,例如 Agg,它可以在无 GUI 环境下生成图片。

python 复制代码
import matplotlib
matplotlib.use('Agg')  # 在导入 pyplot 之前设置后端
import matplotlib.pyplot as plt
相关推荐
qq_4176950532 分钟前
机器学习与人工智能
jvm·数据库·python
漫随流水34 分钟前
旅游推荐系统(view.py)
前端·数据库·python·旅游
yy我不解释1 小时前
关于comfyui的mmaudio音频生成插件时时间不一致问题(一)
python·ai作画·音视频·comfyui
紫丁香2 小时前
AutoGen详解一
后端·python·flask
FreakStudio3 小时前
不用费劲编译ulab了!纯Mpy矩阵micronumpy库,单片机直接跑
python·嵌入式·边缘计算·电子diy
清水白石0085 小时前
Free-Threaded Python 实战指南:机遇、风险与 PoC 验证方案
java·python·算法
飞Link5 小时前
具身智能核心架构之 Python 行为树 (py_trees) 深度剖析与实战
开发语言·人工智能·python·架构
桃气媛媛5 小时前
Pycharm常用快捷键
python·pycharm
Looooking6 小时前
Python 之获取安装包所占用磁盘空间大小
python
WenGyyyL6 小时前
ColBERT论文研读——NLP(IR)里程碑之作
人工智能·python·语言模型·自然语言处理