我已将问题简化为这个简单的示例脚本:
#! /usr/bin/python
import hello
from threading import Thread
def myfunc():
hello.HelloWorld().main()
t = Thread(target=myfunc)
t.start()
print '\nstill running ???'
问题是我试图找到解决gtk事件循环的阻塞行为的问题。这可能吗?正如您所看到的,即使我从一个单独的线程调用该类,事件循环也会阻止主脚本中的进一步进展(在gtk应用程序关闭之前不会打印“仍然运行???”)
答案 0 :(得分:1)
您应该阅读threading best practice for pyGTK。 GTK应该在主线程中使用,但我仍然认为这很奇怪。
我尝试过以下代码:
#! /usr/bin/python
import gtk
from time import sleep
from threading import Thread
def myfunc():
w = gtk.Window()
l = gtk.Label()
w.add(l)
w.show_all()
w.connect("destroy", lambda _: gtk.main_quit())
gtk.main()
def myfunc2():
sleep (3)
t = Thread(target=myfunc)
#t = Thread(target=myfunc2)
t.start()
print '\nstill running ???'
更糟糕的是,关闭应用程序后几乎总会打印出消息,但有时之前会出现。所以,这里有一种奇怪的行为。