所以我應該在我的程序開始運行,使其線程安全(或線程感知正如我在一些地方已經閱讀):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