为什么time.sleep提前暂停?

2 投票
2 回答
645 浏览
提问于 2025-04-17 05:46

我正在自学Python,参考的是《Head First Programming》这本书。

我想把他们的例子稍微改得更符合我的口味,但我觉得我对time.sleep这个东西理解得不太对。

我的代码是

print("Welcome to SuperBeans!")
time.sleep(3)
answer = input("Do you need a price now? y/n: ")

但是,欢迎信息显示后,它不是暂停三秒钟,而是等了三分钟,然后才显示消息和输入请求。我到底漏掉了什么呢?

另外,当我运行我定义的“poll”函数时,程序似乎一直卡在那里,根本没有显示“polling...”的提示。我知道get_price()是正常工作的,因为它在其他地方能打印出来...

def poll():
    price = 99.99
    print(price)
    while price > 4.74:
        print("Polling...")
        price = get_price()
        time.sleep(5)
    print("Buy!")

所以,为什么欢迎信息的暂停时间比我预期的要长,为什么poll()函数又会卡住呢?

2 个回答

0

关于为什么 poll() 函数会卡住,这可能是因为它一直在 while 循环里转。

那么问题来了:get_price() 这个函数有没有返回过比 4.74 大的值呢?(提示:可以打印出返回的值来看看)

3

如上面评论所讨论的,Python的输出是被缓存的,这意味着程序在运行时(比如等待正确的时间等)其实是正常工作的,但你可能一段时间内看不到输出。

如果你是在一个非标准的控制台运行Python,你需要给Python加上“-u”这个选项来关闭缓存。也就是说:

python -u foo.py

撰写回答