如何在python中制作计时器而不冻结整个代码
Posted
技术标签:
【中文标题】如何在python中制作计时器而不冻结整个代码【英文标题】:How to make a timer in python without freezing up the entire code 【发布时间】:2019-08-28 06:42:24 【问题描述】:我正在使用 Pygame 对马里奥进行编码,并且现在正在对积木进行编码。我想制作一个计时器,所以当我在一秒钟后击中积木块时,积木块会回到其原始位置以制作击球动画。问题是当让计时器进入睡眠状态时,它会在计时器期间冻结整个游戏。我需要运行代码并在一秒钟后启动前一个代码块。
我曾尝试使用 sleep 来制作计时器,但它会冻结整个游戏。谁能给我一些知识?谢谢!
【问题讨论】:
【参考方案1】:from threading import Timer
def timeout():
# do your stuff here
t = Timer(number_of_seconds, timeout)
t.start()
【讨论】:
【参考方案2】:我建议你使用threading 模块和线程两个函数。
最后,你可以这样格式化:
from threading import Thread
if __name__ == '__main__':
Thread(target = game()).start()
Thread(target = timer()).start()
另一个选项是timeit 模块。您可以设置一个计时器并使用 if/while 语句检查何时到达某个时间。
第三个选项是你用于睡眠的时间模块:
import time
max_time = #the time you want
start_time = time.time()
while (time.time() - start_time) < max_time:
game()
【讨论】:
【参考方案3】:import sys
import time
import os
counter=0
s = 0
m = 0
n = int(input("Till How Many Seconds do you want the timer to be?: "))
print("")
while counter <= n:
sys.stdout.write("\x1b[1A\x1b[2k")
print(m, 'Minutes', s, 'Seconds')
time.sleep(1)
s += 1
counter+=1
if s == 60:
m += 1
s = 0
print("\nTime Is Over Sir! Timer Complete!\n")
beepPath = ("C:\\Users\\Farzeen Zargar\\Desktop\\Fizz Folder\\Videos\\Youtube Video Edits")
songs = os.listdir(beepPath)
os.startfile(os.path.join(beepPath, songs[13]))
【讨论】:
嗨@LumberFizz,欢迎来到***!您正在回答一个超过 1 年的问题。请尝试回答新问题,这更有帮助。并且不要只是添加代码块。解释你的答案,以便创作者能够向你学习。以上是关于如何在python中制作计时器而不冻结整个代码的主要内容,如果未能解决你的问题,请参考以下文章