我正在使用wxPython和matplotlib编写一个交互式应用程序。我在窗口中嵌入了一个单独的图形作为FigureCanvasWxAgg
实例。我正在使用此图显示64,000到512,000个数据点之间的一些大型数据集,因此matplotlib的渲染需要一段时间。新数据每1-2秒就可以到达,因此渲染速度对我来说很重要。
现在我有一个update_graph_display
方法,可以完成更新图表的所有工作。它处理更新实际数据以及将 y 轴刻度从线性更改为对数以响应用户操作。总而言之,此方法在我的axes
实例上调用了多种方法:set_xlim
,set_ylabel
,plot
,annotate
以及其他一些方法。
update_graph_display
包含在a decorator that forces it to run on the main thread中,以防止同时从多个线程修改UI。问题是所有这些图形计算和绘图都需要一段时间,并且由于所有这些工作都发生在主线程上,因此应用程序在明显的时间段内没有响应。
图形内容的计算在多大程度上可以在其他线程上完成?我可以在后台线程上调用set_xlim
,plot
和朋友,只推迟对主线程的canvas.draw()
调用吗?或者是否有一些axes
方法本身会强制图重绘自己?
答案 0 :(得分:0)
我将重现@ tcaswell的评论:
没有
Axes
方法应强制重新绘制(如果您发现任何相关内容请将其报告为错误),但我不太了解线程告诉您它们是否安全。您可能会尽可能地使用blitting和/或重新使用艺术家(通过set_data调用)获得一些牵引力,但您必须编写逻辑来管理您的自己。看一下动画代码的工作原理。