线程处理等待输入

时间:2017-04-11 14:35:55

标签: python multithreading

我尝试在运行其他进程时运行后台计时器。我使用过thread.Thread:

import threading
import random
import time
import sys
def timer(limit):
    time.sleep(limit)
    sys.exit()
def code():   
    dictionary=['hello','loading','dumb']
    word=[]
    c=random.choice(dictionary)
    answer=c
    for x in c:
        word.append(x)
    y=0
    words=''
    while y!=len(c):
        x=random.choice(word)
        word.remove(x)
        words=words+x
        y+=1
    print(words)
    guess=input()
    if guess==answer:
        print('NOICE')
    else:
        print("NUB")
    permit=input('Play Again?')
t1=threading.Thread(target=timer, args=(10,))
t2=threading.Thread(target=code)
t1.start()
t2.start()

这就是我的所有代码。问题是,当我运行它时,计时器在退出之前等待输入。无论输入是否输入,我希望计时器以十秒标记退出。我认为线程会使进程不必等待彼此。请帮忙? 哦,我只有几天进入python,所以请保持简单的解释。感谢。

1 个答案:

答案 0 :(得分:0)

当您在其中一个线程中调用sys.exit()时,这不会影响其他线程。这就是他们的本性!所有线程都是相同的。

如果你想创建一个在程序退出时终止的线程,需要将它变成一个守护进程(想想主线程下的一个slave)。

要做到这一点:

slave_thread.daemon = True

在你的情况下:

t2.daemon = True

因此,当主线程退出时,t2将被终止。不要将此主线程与t1混淆。当线程正在运行(t1)时,主线程将继续执行。但是只要t1退出,t2将被终止,因为它是守护进程。