【问题标题】:Threading Process Waits For Input线程进程等待输入
【发布时间】:2017-04-11 22:50:29
【问题描述】:

我正在尝试在运行其他进程的同时运行后台计时器。我用过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 几天,所以请保持你的解释简单。谢谢。

【问题讨论】:

  • 如果您不使用 Windows,您可能会找到一些有用的答案 here

标签: python multithreading


【解决方案1】:

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

如果你想创建一个在程序退出时终止的线程,则需要将其制成一个守护进程(想想主线程下的从属)。

这样做:

slave_thread.daemon = True

在你的情况下:

t2.daemon = True

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-28
    • 1970-01-01
    • 2012-02-18
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    相关资源
    最近更新 更多