【发布时间】:2023-01-25 00:13:08
【问题描述】:
当从主 tkinter 线程启动具有 tkinter 功能的独立线程时,我了解到 tkinter 不是线程安全的艰难方法。我以(对我而言)不可重现的方式收到错误消息,主要是与内部连接有关的“主线程不在主循环中”德尔在我停止我的应用程序后打电话。有时内核在执行期间或之后崩溃,通常一切都运行顺利。
这些独立的线程应该在几台仪器上运行数据采集 (DAQ),根据仪器的类型使用不同的 GUI。线程化似乎是可行的,因为从一开始就不知道某个时间需要哪种仪器,如果仪器繁忙,DAQ 任务应该排队等。
所以,我现在的想法是在主线程没有任何 tkinter 功能的情况下启动 DAQ 线程。特定的 DAQ 线程知道要使用哪个特定的 GUI,并将这个特定的 GUI 类放入一个队列中,该队列在主 GUI/tkinter 线程中处理。然后将在 GUI/tkinter 线程中创建 GUI 类的实例。
只要在主 tkinter 线程中创建 GUI 实例,这种方法是否仍会违反线程安全或一切正常?
【问题讨论】:
-
您当然可以在 tkinter 应用程序中使用线程(我已经做到了),但是您不能(或者更准确地说,不应该) 做的是从这些线程调用任何 tkinter 方法。这意味着您的 GUI 只需要存在于主线程中。您可以创建其他线程来处理其他作业(如 DAQ)并使用队列等从这些线程返回值。
标签: python multithreading class tkinter instance