我正在使用 TKinter 构建一个 GUI(用于与多通道分析仪的套接字连接)以定期(~15 秒)接收和绘制数据(~15.000.000 值)。
在接收数据时,我不希望 GUI 冻结,所以我使用多线程进行连接处理、数据接收和绘图操作。正如在可重现的代码中看到的那样,我通过设置一个事件并threading.Event()
一个接一个地处理线程(initSettings()
&中的几行代码acquireAndPlotData
)来实现这一点。我唯一一次干扰 GUI 是在绘制到画布时 & 我使用 tkintersafter()
方法执行此操作。
启动时,只要窗口打开并按预期工作,代码就会运行而不会冻结并接收和绘图。
当我读到在 tkinter GUI 中处理阻塞 I/O 操作时,我只找到了递归排队和检查队列的示例(使用Queue
& after()
, 1 2 3 4 5 ),但我发现它更方便,更容易处理这些操作threading.Event()
。
现在我的问题是:
我是在使用正确的方法还是在这里遗漏了一些重要的东西?(关于线程安全,竞争条件,如果绘图失败并且花费的时间比数据采集时间长怎么办?我没有想到的东西?不良做法?等等......)
我将非常感谢您对此事的反馈!
波斯汪
相关分类