如何在Python中运行后台计时器

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在Python中运行后台计时器相关的知识,希望对你有一定的参考价值。

我正在制作一个数学游戏,用户有60秒的时间来回答尽可能多的问题。截至目前,除了计时器之外我还能正常工作,计时器应该倒数到0或计数到60然后停止游戏。现在,我将计时器设置为time.clock()以计数到60,而当计时器小于该计时器时,游戏将继续运行。但是出于某种原因,time.clock()没有像我期望的那样工作。我也尝试同时运行两个while循环,但这两个循环都不起作用。有人能帮帮我吗?只需寻找一种在后台运行计时器的方法。

这是我的代码:

    score = 0
    timer = time.clock()
    lives = 3

    while timer < 60 and lives > 0:
        if score >= 25:
            x = random.randint(-100,100)
            y = random.randint(-100,100)
            answer = int(raw_input("What is %d + %d? " % (x,y)))
            if answer == x + y:
                print "Correct!"
                score += 1
            else:
                print "Wrong!"
                lives -= 1
        elif score >= 20:
            x = random.randint(-75,75)
            y = random.randint(-75,75)
            answer = int(raw_input("What is %d + %d? " % (x,y)))
            if answer == x + y:
                print "Correct!"
                score += 1
            else:
                print "Wrong!"
                lives -= 1
        elif score >= 15:
            x = random.randint(-50,50)
            y = random.randint(-50,50)
            answer = int(raw_input("What is %d + %d? " % (x,y)))
            if answer == x + y:
                print "Correct!"
                score += 1
            else:
                print "Wrong!"
                lives -= 1
        elif score >= 10:
            x = random.randint(-25,25)
            y = random.randint(-25,25)
            answer = int(raw_input("What is %d + %d? " % (x,y)))
            if answer == x + y:
                print "Correct!"
                score += 1
            else:
                print "Wrong!"
                lives -= 1
        elif score >= 5:
            x = random.randint(-10,10)
            y = random.randint(-10,10)
            answer = int(raw_input("What is %d + %d? " % (x,y)))
            if answer == x + y:
                print "Correct!"
                score += 1
            else:
                print "Wrong!"
                lives -= 1
        elif score >= 0:
            x = random.randint(-5,5)
            y = random.randint(-5,5)
            answer = int(raw_input("What is %d + %d? " % (x,y)))
            if answer == x + y:
                print "Correct!"
                score += 1
            else:
                print "Wrong!"
                lives -= 1
    if lives == 0:
        print "Oh no! You ran out of lives! Your score was %d." % score
    elif timer == 60:
        print "Time's up! Your score is %d." % score
else:
    print "Goodbye!"
答案

使用time.time(),它返回纪元时间(即1970年1月1日以来UNIX Time的秒数)。您可以将其与开始时间进行比较以获得秒数:

start = time.time()
while time.time() - start < 60:
    # stuff

您可以让计时器在任何时候(即使用户输入信息)将信号从您的代码中拉出来,但信号稍微复杂一些。一种方法是使用信号库:

import signal
def timeout_handler(signal, frame):
    raise Exception('Time is up!')
signal.signal(signal.SIGALRM, timeout_handler)

这定义了一个引发异常的函数,并在超时发生时调用。现在,您可以将while循环放在try catch块中并设置计时器:

signal.alarm.timeout(60)
try:
    while lives > 0
        # stuff
except:
    # print score

以上是关于如何在Python中运行后台计时器的主要内容,如果未能解决你的问题,请参考以下文章

iOS:关闭应用程序时如何在后台运行代码?

即使应用程序在后台运行或手机被锁定在 Windows Phone 中,如何让计时器运行

计时器:如何在后台保持计时器处于活动状态

python使用上下文对代码片段进行计时,非装饰器

如何在应用程序进入后台或终止时运行计时器

如何在后台运行计时器