FuncAnimation 在动态发送数据以绘制移动散点后没有响应

FuncAnimation doesn't respond when after dynamically sending data to plot to move a scatter point

所以我正在使用 matplotlib 中的 FuncAnimation,因此当数据从串行端口到达时动态绘制一些数据(在我的项目中是来自 dronekit 的车辆 class,用绿点显示),什么我基本上是调用的动画,每个循环都接收一个新的车辆 class,数据已更改,因此可以绘制它,但由于某种原因,它绘制但在任务线程后几秒钟后(哪个允许"refresh"它弹出并杀死python(死亡之轮)的车辆数据,这是我得到的:

我在 FuncAnimation 启动时调用的函数中放置了一些跟踪打印 运行,如下所示:

def droneAnimation(i, vehicle, droneScatter):
     time.sleep(1)
     lat = [vehicle.location.global_relative_frame.lat]
     lon = [vehicle.location.global_relative_frame.lon]
     alt = [vehicle.location.global_relative_frame.alt]
     print("Alt received: " + str(alt))
     droneScatter._offsets3d = (lat,lon,alt)
     print("Changed pos")

如您所见,这些打印在前几秒被触发,但在几次迭代后仍然崩溃。 FuncAnimation 是这样调用的:

        fig,droneScatter = plotLiveSimpleFacade(vehicle,w,2)
        ani = FuncAnimation(fig,droneAnimation, fargs = (vehicle,droneScatter))
        plt.draw()
        plt.pause(0.1)
        m = threading.Thread(target=MissionStart(vehicle,hmax) , name = "MISSION")
        m.start()

供参考:fig是一个plt.figure(),droneScatter只是一个散点,vehicle是包含动态更新数据的车辆class,MissionStart线程只是一个线程让车辆class加班换车

我还想提一下,无花果处于交互模式,并且轴限制设置得很好(我看到当您动态更改数据但不缩放轴时可能会有问题),尝试 plt.draw() 和 plt.plot(block = False) 的不同组合导致我根本不绘制或只是一个空白图。

因为我不知道是什么原因造成的,所以我将把 dronekit 标签放在这个和线程上,看看是否有人有任何想法!

我已经研究过使用 matplotlib 进行线程处理,看起来使用这个库进行线程处理并不是最好的,因为它不是线程安全的,最好的办法是查看 python 的多处理或解决问题一种不同的方式。 您可以在此

找到更多信息