Вопрос по time, limit, sleep, python – Верхний предел в Python time.sleep ()?

2

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

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

Ваш Ответ

6   ответов
-1

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

sleep(4294967.2950000003911901)

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

Как вы получили этот номер? SherylHohman
8

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

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

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

+1 за то, что не совершил ту же ошибку, что делает @mykhal, где совокупный эффект от сна маленькими шагами нарастает, что приводит к заметно большему количеству сна, чем хотелось бы. Peter Hansen
5

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

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

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

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

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

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

0

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

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

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

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

Извини не сделалдругие ответы не видны перед публикацией. zpon

Похожие вопросы