擅长:python、mysql、java
<p>标记为<code>daemon</code>的线程在每一个其他非守护进程线程死亡时自动死亡。在您的例子中,主线程在您的两个守护进程线程上调用<code>start()</code>之后就死了,带来了python进程。在你的线程中完成任何事情都是运气和时间的问题。</p>
<p><code>sys.exit(0)</code>不会终止主线程以外的线程。你需要一种方法来向你的线程发出停止的信号。一种方法是通过<a href="https://docs.python.org/2/library/threading.html#event-objects" rel="nofollow">Event</a>对象。</p>
<p>不应使用<code>getch</code>来尝试捕获Ctrl+C,请尝试使用信号处理程序:</p>
<pre><code>from threading import Thread
from threading import Event
from time import sleep
import signal
stop = Event()
def handler(signum, frame):
y = raw_input("Are you sure you want to quit? (y/n): ").lower()
if y == 'y':
stop.set()
def main():
t = 0
while not stop.isSet():
print "The count is {0}".format(t)
t +=1
sleep(1)
if __name__ == "__main__":
signal.signal(signal.SIGINT, handler)
mainthread = Thread(target = main)
mainthread.start()
while mainthread.is_alive():
try:
mainthread.join(timeout = 0.1)
except IOError:
pass #Gets thrown when we interrupt the join
</code></pre>