哪个matplotlib.axes方法可以安全地从后台线程调用?

时间:2014-04-29 20:08:57

标签: matplotlib wxpython

我正在使用wxPython和matplotlib编写一个交互式应用程序。我在窗口中嵌入了一个单独的图形作为FigureCanvasWxAgg实例。我正在使用此图显示64,000到512,000个数据点之间的一些大型数据集,因此matplotlib的渲染需要一段时间。新数据每1-2秒就可以到达,因此渲染速度对我来说很重要。

现在我有一个update_graph_display方法,可以完成更新图表的所有工作。它处理更新实际数据以及将 y 轴刻度从线性更改为对数以响应用户操作。总而言之,此方法在我的axes实例上调用了多种方法:set_xlimset_ylabelplotannotate以及其他一些方法。

update_graph_display包含在a decorator that forces it to run on the main thread中,以防止同时从多个线程修改UI。问题是所有这些图形计算和绘图都需要一段时间,并且由于所有这些工作都发生在主线程上,因此应用程序在明显的时间段内没有响应。

图形内容的计算在多大程度上可以在其他线程上完成?我可以在后台线程上调用set_xlimplot和朋友,只推迟对主线程的canvas.draw()调用吗?或者是否有一些axes方法本身会强制图重绘自己?

1 个答案:

答案 0 :(得分:0)

我将重现@ tcaswell的评论:

  

没有Axes方法应强制重新绘制(如果您发现任何相关内容请将其报告为错误),但我不太了解线程告诉您它们是否安全。您可能会尽可能地使用blitting和/或重新使用艺术家(通过set_data调用)获得一些牵引力,但您必须编写逻辑来管理您的自己。看一下动画代码的工作原理。