所以我应该在我的程序开始运行,使其线程安全(或线程感知正如我在一些地方已经阅读):Python的GTK + 3安全线程
from gi.repository import Gtk, Gdk, GLib, GObject
import threading
GLib.threads_init() # ?
GObject.threads_init() # YES!
Gdk.threads_init() # ?
my_app()
def my_threaded_func():
Glib.idle_add(lambda: some_gui_action())
Glib.timeout_add(300, lambda: some_gui_action())
t = threading.Thread(target=my_thread_func)
t.daemon = True
t.start()
Gtk.main()
那么,我应该在我的线程吗?某种锁?使用Python的线程库安全吗?还是应该在GLib,GObject或Gdk中使用某些东西?我知道这里有很多问题/答案/例子,但它们都互相矛盾,不适用于Gtk + 3,或者不适用于Python,或者仅仅是不完整,甚至我认为Python GI的官方文档(http://lazka.github.io/pgi-docs/ )甚至没有提到GObject.threads_init()和Gdk.threads_init()的存在。
您发布的链接使用'Gdk.threads_init()'。你能链接到提及它已被弃用的来源吗?而且,你能解释为什么'GLib.idle_add()'而不是'Gdk.threads_add_idle()'?谢谢。 – jpcgt
@jpcgt更新.. – lazka
@lazca我的应用程序没有崩溃,因为我实施了你的建议。为此非常感谢。还有两件事,使用'GObject.threads_init()'而不是'GLib.threads_init()'的基本原理是什么?毕竟我们使用'GLib.add_idle()'与主线程同步。我读过一些人说,最好使用并行进程而不是线程。你能评论吗?再次感谢。 – jpcgt