如何在时间到期后给用户一定的时间回答和打印消息? (蟒蛇)

时间:2020-06-27 09:24:00

标签: python time python-multithreading

我尝试使用多线程来限制用户的输入时间,但是这段代码似乎不起作用。

# giving the user less than 5 seconds to enter a number

import time
from threading import Thread


def ask():
    start_time = time.time()
    a = float(input("Enter a number:\n"))
    time.sleep(0.001)


def timing():
    if time.time() - start_time > 5: 
        print("Time's Up")
        quit()
    time.sleep(0.001)


t1 = Thread(target=ask)
t2 = Thread(target=timing)
t1.start()
t2.start()
t1.join()
t2.join()

2 个答案:

答案 0 :(得分:0)

您需要将计时功能置于无限模式。 Bcz它只运行一次。

尝试以下代码:

import time
import os
from threading import Thread

start_time = time.time()
a = None

def ask():
    global start_time
    start_time = time.time()
    global a
    a = float(input("Enter a number:\n"))
    time.sleep(0.001)


def timing():
    while True:
        global a
        if a is not None:
            break
        if time.time() - start_time > 5: 
            print("Time's Up")
            os._exit(1)
        time.sleep(0.001)


t1 = Thread(target=ask)
t2 = Thread(target=timing)
t1.start()
t2.start()
t1.join()
t2.join()

答案 1 :(得分:0)

我不喜欢全局变量,但是以下代码似乎可以很好地满足您的需求:

import time
from threading import Thread
import sys

start_time = 0
timeUp = False

def ask():
    global start_time, timeUp
    start_time = time.time()
    a = float(input("Enter a number:\n"))
    time.sleep(0.001)
    if a and (not timeUp):
        print('This is a: ', a)

def timing():
    global timeUp
    while True:
        if time.time() - start_time > 5: 
            print("Time's Up")
            timeUp = True
            sys.exit()
        time.sleep(0.001)


t1 = Thread(target=ask)
t2 = Thread(target=timing)
t1.start()
t2.start()
t1.join()
t2.join()