Верхний предел в Python time.sleep ()?

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

 Boldewyn21 дек. 2009 г., 17:42
Да, есть верхний предел: когда кто-то спотыкается о кабель питания вашей машины ;-)
 Jonathan Feinberg21 дек. 2009 г., 17:48
Какие "вопрос» у тебя есть? Быть конкретными.
 Boldewyn21 дек. 2009 г., 17:50
Я думаю, что этос конкретной платформой, но у меня недостаточно знаний, чтобы что-то доказать.

Ответы на вопрос(6)

Фактический ответ, по крайней мере, для моей машины: 4294967.2950000003911900999 ... секунд.

sleep(4294967.2950000003911901)

OverflowError: длина сна слишком велика

 SherylHohman28 дек. 2017 г., 22:11
Как вы получили этот номер?

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

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

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

 Peter Hansen21 дек. 2009 г., 20:10
+1 за то, что не совершил ту же ошибку, что делает @mykhal, где совокупный эффект от сна маленькими шагами нарастает, что приводит к заметно большему количеству сна, чем хотелось бы.
Решение Вопроса

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

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

 SilentGhost21 дек. 2009 г., 17:54
@Boldewyn: только потому, что мой Firefox застыл, я был на 3 секунды позже, чем Эли.
 SilentGhost21 дек. 2009 г., 17:55
@Boldewyn: мы предоставляем разные оценки, однако.
 Boldewyn21 дек. 2009 г., 17:49
Чудо копирования ивставить ... (см. eliben 'с ответом). Тем не менее, +1 за включение источника со ссылкой.

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

def sleep(n):
    for i in xrange(n):
        time.sleep(1)
 mykhal21 дек. 2009 г., 19:49
ну, в этом случае яs изменить функцию на: t0 = time.time (); время time.time () < t0 + n: сон (1)
 samtregar21 дек. 2009 г., 19:14
Это немного лучше, но он все еще может спать меньше n, если вызовы sleep () рано прерываются.

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

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

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

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

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

 zpon21 дек. 2009 г., 17:54
Извини не сделалдругие ответы не видны перед публикацией.

Ваш ответ на вопрос