更新:打开程序正在空闲的Windows上运行其代码。关于I/O,它的行为与shell或Windows命令行不同。他的代码在Windows命令行上运行。
原则上,你的代码对我有效。我正在运行Python2.6.5。
这里有几点意见:
1)在你的情况下,最好只有两个线程:主线程和另一个线程。不过,它也将与三个工作。只是你的主线程只会等待其他线程完成。
2)应该显式地join()生成的所有线程。在终止主线程之前,在主线程中执行此操作。记录生成的线程(例如在列表中),然后在程序结束时加入它们(例如for t in threads: t.join())。
3)在线程之间共享变量self.running。在这种情况下是可以的,因为一个线程只读它,另一个线程只写它。一般来说,您需要非常小心共享变量,并在更改之前获取一个锁。
4)您应该捕获主线程中的KeyboardInterrupt异常,并找到与其他线程通信的方法来终止:)
5)使用小写的方法名,所以不要调用getUserInput,而是调用get_user_input。使用大写类名并从object:class Test(object):继承
这是一个运行示例:import threading
from time import sleep
def main():
t = Test()
t.go()
try:
join_threads(t.threads)
except KeyboardInterrupt:
print "\nKeyboardInterrupt catched."