python - PyGTK 阻塞非 GUI 线程

标签 python multithreading pygtk

我想用 PyGTK 解决线程错误。到目前为止我有这段代码:

#!/usr/bin/python

import pygtk
pygtk.require('2.0')
import gtk
import threading
from time import sleep

class SomeNonGUIThread(threading.Thread):
    def __init__(self, tid):
        super(SomeNonGUIThread, self).__init__()
        self.tid = tid

    def run(self):
        while True:
            print "Client #%d" % self.tid
            sleep(0.5)

class App(threading.Thread):
    def __init__(self):
        super(App, self).__init__()

        self.window = gtk.Window()
        self.window.set_size_request(300, 300)
        self.window.set_position(gtk.WIN_POS_CENTER)
        self.window.connect('destroy', gtk.main_quit)

        self.window.show_all()

    def run(self):
        print "Main start"
        gtk.main()
        print "Main end"


if __name__ == "__main__":
    app = App()

    threads = []
    for i in range(5):
        t = SomeNonGUIThread(i)
        threads.append(t)

    # Ready, set, go!
    for t in threads:
        t.start()

    # Threads work so well so far
    sleep(3)

    # And now, they freeze :-(
    app.start()

NonGUIThreads 确实同时运行了 3 秒。之后,显示该窗口并且其他线程被停止!关闭窗口后,线程再次运行。

gtk.main() 怎么可能阻塞其他线程?线程不依赖于任何锁,因此它们应该在窗口显示期间工作。

最佳答案

在执行任何与 Gtk 相关的操作之前,您必须先调用 gobject.threads_init()

More info in PyGtk's FAQ

关于python - PyGTK 阻塞非 GUI 线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6101415/

相关文章:

python - Python 语言中的矩阵乘法

python - 如何在 Python 3 中使用 pyhocon 动态生成 Hocon conf 文件?

python - 相同的指令,不同的结果

c++ - Boost.Thread 类 CEvent 行为

python - 使用 glade/gtkbuilder 传递用户数据

python - import gtk/glib 产生 ImportError : DLL load failed

python - 如何使用分隔符拆分 pandas 中的列并在此过程中分配自定义唯一名称?

我们可以为所有其他调用使用 pthreads 互斥锁锁定一个函数吗?

java - 多线程应用程序中的 NTLM 身份验证失败

python - 套接字线程和 PyGTK