Почему time.sleep останавливается рано? - PullRequest
2 голосов
/ 07 ноября 2011

Я учу себя питону с помощью Head First Programming.

Я думал, что мог бы подправить их пример больше по своему вкусу, но я думаю, что мне чего-то не хватает в time.sleep.

Мой код

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

Но вместо того, чтобы останавливаться на три секунды после приветственного сообщения, он ждет 3 минуты, затем отображает как сообщение, так и запрос на ввод. Чего мне не хватает?

Кроме того, программа, кажется, зависает на неопределенный срок при запуске определенной мной функции «опрос», даже не отображая уведомление «опрос ...». Я знаю, что 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 ]

2 голосов
/ 07 ноября 2011

Как обсуждалось в комментариях выше, вывод Python буферизуется, поэтому программы работают (и спят в нужное время и т. Д.), Но вы не видите вывод некоторое время.

Если вы используете Python из нестандартной консоли, вам нужно передать опцию "-u" в Python, чтобы отключить буферизацию. I.e.:

python -u foo.py
0 голосов
/ 07 ноября 2011

О том, почему функция poll() зависает, это может быть связано с тем, что она остается в цикле while.

Итак, вопрос: get_price() когда-либо возвращает что-то строго большее, чем 4.74?(подсказка: выведите возвращаемое значение)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...