我想用 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()
。
关于python - PyGTK 阻塞非 GUI 线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6101415/