【问题标题】:Why is time.sleep pausing early?为什么 time.sleep 提前暂停?
【发布时间】:2011-11-07 00:05:35
【问题描述】:

我正在借助 Head First Programming 自学 Python。

我想我可能会根据自己的喜好调整他们的示例,但我认为我错过了关于 time.sleep 的一些内容。

我的代码是

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

但不是在欢迎消息后暂停三秒钟,而是等待 3 分钟,然后显示消息和输入请求。我错过了什么?

此外,在运行我定义的“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() 函数会挂起?

【问题讨论】:

  • 当我运行你的第一个代码块时,它会休眠大约三秒钟。
  • 这是标准输出缓冲区没有被刷新
  • 这是调用time.sleep 的正确方法,并且您的代码sn-ps 在OS X 上可以正常工作。如果您单独运行它们,它们是否对您有用,而不需要程序的其余代码?
  • 嗯……奇怪。我正在使用 nppexec 从 notepad++ 控制台运行它。我刚刚尝试从 IDLE 运行它,它运行良好。我想这解决了一个问题,新的问题是为什么它不能从 npp 正常工作?
  • @Daniel Ball:当您以交互方式运行它时,stdin/stdout 将被行缓冲,否则使用固定缓冲区。比较python -c'import sys; print sys.stdin.isatty()'echo abc | python -c'import sys; print sys.stdin.isatty()'

标签: python time


【解决方案1】:

正如上面 cmets 中所讨论的,Python 输出正在被缓冲,因此程序运行(并在正确的时间休眠等),但您暂时看不到输出。

如果您从非标准控制台运行 Python,则需要将“-u”选项传递给 Python 以禁用缓冲。即:

python -u foo.py

【讨论】:

  • 我把它放在 nppexec 的运行行中,效果很好,谢谢!
【解决方案2】:

关于为什么poll()函数挂起,这可能是因为它停留在while循环中。

所以问题:get_price() 是否曾经返回严格大于 4.74 的东西? (提示:打印返回的值)

【讨论】:

  • 它最终会,是的。问题是当它在 while 循环中时,它没有打印“polling...”
猜你喜欢
  • 2015-07-28
  • 1970-01-01
  • 2020-12-01
  • 1970-01-01
  • 2010-11-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-19
相关资源
最近更新 更多