看一下这个简单的python gobject程序:
import threading
import gobject
import time
def f():
while True:
print "HELLO"
time.sleep(1)
threading.Thread(target=f).start()
gobject.MainLoop().run()
它会生成一个线程,每秒输出“HELLO”,然后进入gobject主循环。问题在于它实际上什么也没做。为什么?
$ python a.py
[...]
如果我按下CTRL+C键,它就开始工作了。而且,删除程序中的最后一行(
gobject.MainLoop().run()
)也会使其工作。为什么?$ python a.py
^CTraceback (most recent call last):
File "a.py", line 11, in <module>
gobject.MainLoop().run()
KeyboardInterruptHELLO
HELLO
HELLO
HELLO
[...]
看一下这个第二个程序,它与第一个程序完全相同,只是它告诉gobject每秒运行一次函数g
。这个有点起作用,生成的线程偶尔会运行一次,而不是从不运行。为什么?
import threading
import gobject
import time
def f():
while True:
print "HELLO"
time.sleep(1)
threading.Thread(target=f).start()
def g():
print "yo"
return True
gobject.timeout_add_seconds(1, g)
gobject.MainLoop().run()
运行它:
$ python b.py
HELLOyo
yo
yo
yo
HELLO
yo
yo
yo
yo
yo
yo
yo
HELLO
yo
yo
yo
yo
^CTraceback (most recent call last):
File "b.py", line 16, in <module>
gobject.MainLoop().run()
KeyboardInterrupt
HELLO
HELLO
HELLO
HELLO
HELLO
再次按下CTRL+C,将会使生成的线程起作用。为什么?
这是使用pygobject-2.28.6库。