gpt4 book ai didi

python - tkinter 的 `after` 方法线程安全吗?

转载 作者:行者123 更新时间:2023-12-03 12:47:17 25 4
gpt4 key购买 nike

由于 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com