如何在Python中使线程依赖于另一个线程?

问题描述 投票:0回答:1

我使用了这篇文章

中的以下代码
from threading import Thread
import time
import os

answer = None

def ask():
    global start_time, answer
    start_time = time.time()
    answer = input("Enter a number:\n")
    time.sleep(0.001)
    return 0


def timing(t):
    global answer
    time_limit = t
    while True:
        time_taken = time.time() - start_time
        if answer is not None:
            print(f"You took {time_taken} seconds to enter a number.")
            time_limit += 3
            answer = None
        if time_taken > time_limit:
            print("Time's up !!! \n"
                  f"You took {time_taken} seconds.")
            os._exit(1)
        time.sleep(0.001)


t1 = Thread(target=ask)
t2 = Thread(target=timing, args=(5,))

t1.start()
t2.start()

我想做的是,如果用户在 5 秒之前输入一个数字,他还有 3 秒的时间来输入另一个数字。如此重复,直到时间过去。但我不知道如何让它“回忆”功能“ask”。

我很高兴获得任何帮助。

python multithreading user-input
1个回答
0
投票

也许你可以稍微改变一下逻辑:

  • 当你输入函数
    ask()
    时,计算
    final_time
    (即从现在开始的未来5秒)
  • 在线程
    timing()
    中,您只检查这个
    final_time
    是否仍在将来,如果不是,则退出脚本
  • 如果用户在间隔内输入数字,请将此
    final_time
    增加3秒:
import datetime
import os
import time
from threading import Thread


def ask():
    global final_time

    final_time = datetime.datetime.now() + datetime.timedelta(seconds=5)

    while True:
        start_time = datetime.datetime.now()
        answer = input("Enter a number:\n")
        time_taken = (datetime.datetime.now() - start_time).seconds

        final_time += datetime.timedelta(seconds=3)

        print(f"You took {time_taken} seconds to enter a number.")
        print(
            f"You have {(final_time - datetime.datetime.now()).seconds} seconds still left."
        )


def timing():
    while True:
        time.sleep(0.001)

        if final_time < datetime.datetime.now():
            print("Time's up !!!")
            os._exit(1)


t1 = Thread(target=ask)
t2 = Thread(target=timing)

t1.start()
t2.start()

打印(例如):

Enter a number:
1
You took 0 seconds to enter a number.
You have 7 still left.
Enter a number:
2
You took 1 seconds to enter a number.
You have 8 still left.
Enter a number:
1
You took 3 seconds to enter a number.
You have 8 still left.
Enter a number:
1
You took 5 seconds to enter a number.
You have 6 still left.
Enter a number:
Time's up !!!
© www.soinside.com 2019 - 2024. All rights reserved.