项目描述:
将现有的“ C”程序(主控件)连接到Python GUI / Widget。为此,我使用了FIFO。C程序旨在查看基于帧的遥测。
Python GUI执行两个功能:
实施注意事项:
我猜测,在基于信号的体系结构中通过线程创建的绘图过多时,可能会变得比较滞后。我不确定它们何时会受CPU限制…大多数图都会更新一些线系列,有些会更新图像。不管我选择哪种创建方式,无论采用哪种方式都可能会很麻烦。
我不确定打开30个python进程是什么,每个进程使用matplotlib绘制一两个图都会对一台机器或其资源产生影响。我在系统上看到一个简单的matplotlib图,其RSS(已分配内存)为117M,因此,如果通过为每个图打开单独的进程来完成30个图,则我认为单个用户不会限制30个图。(具有多个同时用户的16 GB,32核Linux Box)
问题:
因此,我能够以两种方式实施该项目-使用和不使用多进程。
我读到matplotlib在网络上不是线程安全的,但是,从等待队列读取的线程发出的pyqt插槽读起来似乎不错。
我选择实现方式是为了使用户能够灵活地在同一过程中打开地块,或者在另一过程中打开一批地块,而不是每个过程都预先确定数量的地块,以为可能会创建某些具有复杂更新的地块,而这些地块应该得到他们自己的过程,可以这样选择。这也比简单进程的每个进程的进程浪费更少,每个进程最少100MB,而同一进程中每个额外的进程仅需要3MB左右的额外内存。
最后一个细节是用户可能非常迅速地切换框架。我让接收进程读取并在非阻塞守护程序线程中清空队列,并仅获取最新信息。一旦发送了用于更新绘图的信号,便由绘图更新循环抓住了线程锁,并且在更新方法释放了线程锁之后,读取的守护程序再次能够发出更新。