2009-12-21 146 views
2

你有多長時間可以用time.sleep()指定一個線程睡眠的上限?我一直在長時間睡眠我的腳本(即超過1k秒)。這個問題已經出現在Windows和Unix平臺上。Python中的上限time.sleep()?

+2

是的,有一個上限:當有人絆倒你的機器;-) – Boldewyn 2009-12-21 16:42:51

+4

「問題」您有什麼的電源線?請明確點。 – 2009-12-21 16:48:07

+0

我的猜測是它是平臺特定的,但我沒有足夠的知識來推測任何事情。 – Boldewyn 2009-12-21 16:50:38

回答

5

我想時間越長就越有可能situation described in the docs

The actual suspension time may be less than that requested because any caught signal will terminate the sleep() following execution of that signal’s catching routine. Also, the suspension time may be longer than requested by an arbitrary amount because of the scheduling of other activity in the system.

+0

複製和粘貼的奇蹟......(見艾麗本的答案)。但是,+1包含鏈接源。 – Boldewyn 2009-12-21 16:49:46

+0

@Boldewyn:只是因爲我的firefox被凍結了,我3秒後才eli。 – SilentGhost 2009-12-21 16:54:01

+0

@Boldewyn:但是我們確實提供了不同的評估。 – SilentGhost 2009-12-21 16:55:22

1

細則中指出:

Suspend execution for the given number of seconds. The argument may be a floating point number to indicate a more precise sleep time. The actual suspension time may be less than that requested because any caught signal will terminate the sleep() following execution of that signal’s catching routine. Also, the suspension time may be longer than requested by an arbitrary amount because of the scheduling of other activity in the system.

一無所知這裏的時間限制。當然,1K秒並不多,應該沒有問題。

1

根據該文件,time.sleep接受任何非零數字[1],因爲你可能知道。但是,您也受到操作系統調度程序的影響[1]。

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

+0

對不起,在發佈之前沒有看到其他答案。 – zpon 2009-12-21 16:54:59

1

可以防止可能出現的問題,通過將睡眠短的延遲進入死循環:

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

這比較好一點,但如果sleep()調用提前中斷,它仍可能睡眠時間小於n。 – samtregar 2009-12-21 18:14:35

+1

好吧,在這種情況下,我將函數改爲:t0 = time.time(); while time.time() mykhal 2009-12-21 18:49:33

7

其他人解釋你爲什麼會睡不到你要的,但沒有告訴你如何處理這個問題。如果你需要確保你的睡眠至少n秒,你可以使用如下代碼:

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

這可能睡了N多,但它永遠不會沉睡至少n秒之前返回。

+0

+1不會犯同樣的錯誤@mykhal所做的,其中小增量的累積效果會增加,導致明顯比所需的更多的總睡眠。 – 2009-12-21 19:10:06

-1

實際答案,至少在我的機器上: 4294967.2950000003911900999 ...秒。

sleep(4294967.2950000003911901) 

OverflowError:睡眠長度過大

+1

你是如何獲得這個數字的? – SherylHohman 2017-12-28 21:11:43