我有一个 Tkinter/ttk 应用程序,它分析每 10-25 毫秒到达的数据包。我目前的实现使用一个线程,在每次读取套接字后更新 30 个 StringVar,然后调用 update_idletasks() 来更新相应的 Entry 小部件。我的应用程序在启动后不超过 30 分钟崩溃。
搜索显示 Tk 并不是真正的线程安全,我有两个主要选择:
使用线程+队列。
使用函数 + .after(1, function)。
UI 只是启动/停止更新,并提供 Entry 小部件以供显示。
系统中的主要等待是套接字读取,它的超时是预期数据包速率的 2 倍(因此它不能永远阻塞)。
在这种情况下,您更喜欢方法#1 还是#2?
我倾向于 #2 的简单性,但我不确定是否有任何 Tk 陷阱在这条路上等待。在等待社区智慧的同时,我可能会同时尝试两者。