作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
由于 tkinter 不是线程安全的,我经常看到人们使用 after
方法将一些代码排队以在主线程中执行。下面是一个例子:
import tkinter as tk
from threading import Thread
def change_title():
root.after(0, root.title, 'foo')
root = tk.Tk()
Thread(name='worker', target=change_title).start()
root.mainloop()
root.title('foo')
直接在
worker
线程,我们用
root.after
将它排队并让主线程执行它。但不是打电话
root.after
和打电话一样糟糕
root.title
?是
root.after
线程安全?
最佳答案
after
是线程安全的,因为它是根据 call
实现的根据 CPython source code,这通常是线程安全的如果 CPython 和 Tcl 是用线程支持构建的(最常见的情况)。这意味着 tkinter
的占用空间很大。方法是线程安全的,但不是全部(特别是 eval
)。
如果您调用 after
(或 call
)来自其他一些 CPython 线程,它实际上会向主线程(使用 Tcl 解释器)发送线程安全消息,以实际与 Tcl API 交互并在主线程中运行命令。
关于python - tkinter 的 `after` 方法线程安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58118723/
我是一名优秀的程序员,十分优秀!