Matplotlib与多处理冻结计算机

CoM*_*tel 6 python matplotlib multiprocessing python-2.7

我有matplotlib和多处理的问题.我启动了第一个过程,我在其中显示图像并选择一个区域,然后关闭图形.然后我启动另一个进程,在那里我调用一个定期更新的图形函数.在这一点上,eveything工作正常.然后,当我尝试使用SAME图形函数启动另一个进程时,它会冻结我的整个计算机,但后台进程仍然工作...我只有其中一个错误(它并不总是相同):

错误1:

XIO:X服务器上的致命IO错误25(设备不适当的ioctl)"4438请求(4438已知已处理)后剩余30个事件":0.0".XIO:X43服务器上的致命IO错误11(资源暂时不可用)在4443个请求(4443已知已处理)之后":0.0",剩余31个事件.[xcb]处理队列时的未知序列号[xcb]很可能这是一个多线程客户端,并且没有调用XInitThreads [xcb]正在中止,对不起.python:../../ src/xcb_io.c:274:poll_for_event:断言`!xcb_xlib_threads_sequence_lost'失败.

错误2:

X请求失败的错误:BadIDChoice(为此连接选择的资源ID无效)失败请求的主要操作码:53(X_CreatePixmap)失败请求中的资源ID:0x5600299失败请求的序列号:4793输出流中的当前序列号:4795 XIO:在4788个请求(4788已知已处理)之后,X服务器上的致命IO错误25(设备上不适当的ioctl)":0.0",剩余31个事件.XIO:X93服务器上的致命IO错误25(设备不适当的ioctl)"4793请求(4793已知已处理)之后":0.0",剩余32个事件.

奇怪的是,我可以完全启动几个进程调用图形函数而没有任何问题,它是与第一个图形的耦合,使其不稳定.

在尝试调试时,我发现一个简单fig=plt.figure()就足以使一切崩溃:事实上,任何调用plt......

我在这里和那里读到你可以强制matplotlib使用agg后端,它有助于多进程,但有些小部件不能用它,所以我想避免这种情况.

我真的不明白为什么matplotlib在不同的进程中使用可能会导致问题,所以如果有人能够解释原因和/或帮助我解决问题,那将是非常好的.

Qer*_*bin 1

我刚刚遇到了一个非常类似的问题,其中我有一个并行生成绘图的类。我第一次创建该类的新实例并运行绘图函数时,一切都运行良好。但如果我创建一个新的实例和情节,一切都会冻结。

我通过编写一个 bash 脚本来修复它,该脚本将依次运行一个带有单个类实例化 + 绘图调用代码的 python 脚本。换句话说,在一个绘图调用和下一个绘图调用之间关闭 python 可以使您的工作环境变得干净,计算机不会再冻结。这不是最佳解决方案,但它有效:)