我正在用pygtk编写一个框架的程序。主程序做以下工作:
gobject.Mainloop()但是在我的程序进入主循环之后,看门狗线程似乎也无法运行。
我的解决办法是使用gobject.timeout_add来运行监视器。
但是为什么创建另一个线程不起作用呢?
这是我的代码:
import gobject
import time
from threading import Thread
class MonitorThread(Thread):
def __init__(self):
Thread.__init__(self)
def run(self):
print "Watchdog running..."
time.sleep(10)
def main():
mainloop = gobject.MainLoop(is_running=True)
def quit():
mainloop.quit()
def sigterm_cb():
gobject.idle_add(quit)
t = MonitorThread()
t.start()
print "Enter mainloop..."
while mainloop.is_running():
try:
mainloop.run()
except KeyboardInterrupt:
quit()
if __name__ == '__main__':
main()程序只输出“看门狗running...Enter主循环..”,然后什么也没有。似乎线程在进入主循环后就不会运行。
发布于 2009-11-25 12:34:35
你能贴些密码吗?这可能是因为你对全局解释器锁有问题。
你的问题被别人解决了:)。我可以在这里复制粘贴文章,但简而言之,gtk的c-线程与Python线程发生冲突。您需要通过调用gobject.threads_init()来禁用c-线程,一切都应该可以。
https://stackoverflow.com/questions/1796588
复制相似问题