Верхний предел в Python time.sleep ()? - PullRequest
2 голосов
/ 21 декабря 2009

Существует ли верхний предел того, как долго вы можете указывать поток для сна с помощью time.sleep ()? У меня были проблемы со сном моего сценария в течение длительных периодов (то есть, более 1k секунд). Эта проблема появилась на платформах Windows и Unix.

Ответы [ 6 ]

8 голосов
/ 21 декабря 2009

Другие объяснили, почему вы можете спать меньше, чем просили, но не показали, как с этим справиться. Если вам нужно убедиться, что вы спите не менее n секунд, вы можете использовать такой код:

from time import time, sleep
def trusty_sleep(n):
    start = time()
    while (time() - start < n):
        sleep(n - (time() - start))

Это может спать больше n, но никогда не вернется, пока не уснет хотя бы n секунд.

5 голосов
/ 21 декабря 2009

Полагаю, чем дольше время, тем более вероятная ситуация описана в документах :

Фактическое время приостановки может быть меньше запрошенного, потому что любой пойманный сигнал прекратит sleep() после выполнения процедуры перехвата этого сигнала. Кроме того, время приостановки может быть дольше, чем запрошено на произвольную сумму, из-за планирования других действий в системе.

1 голос
/ 21 декабря 2009

Согласно документации, time.sleep принимает любое ненулевое число [1], как вы, вероятно, знаете. Однако вы также находитесь под влиянием вашего планировщика операционных систем [1].

[1] http://docs.python.org/library/time.html

1 голос
/ 21 декабря 2009

В спецификации сказано:

Приостановить исполнение на заданный номер секунд. Аргумент может быть число с плавающей запятой для обозначения более точное время сна. Настоящий время приостановки может быть меньше запрашивается, потому что любой пойманный сигнал прервет сон () после выполнение ловли этого сигнала рутина. Также время приостановки может быть дольше, чем запрошено произвольное количество из-за планирование другой деятельности в система.

Ничего об ограничении времени здесь. Конечно, 1K секунд не много и должно работать без проблем.

0 голосов
/ 29 декабря 2017

Актуальный ответ, хотя бы для моей машины: 4294967,2950000003911900999 ... секунд.

sleep(4294967.2950000003911901)

OverflowError: слишком большая длина сна

0 голосов
/ 21 декабря 2009

Вы можете предотвратить возможные проблемы, поместив режим сна с небольшой задержкой в ​​цикл:

def sleep(n):
    for i in xrange(n):
        time.sleep(1)
...