2015-05-07 73 views
3

我希望我的Python2守護進程能夠在第二個時刻醒來並完成某些操作。獲取python中的浮點數的小數部分

有沒有更好的方式來獲得一個浮點數的DECMAL一部分以外的睡眠時間,那麼:這取決於有多少工作在本次做

now = time.time()    #get the current time in a floating point format 
left_part = long(now)   #isolate out the integer part 
right_part = now - left_part #now get the decimal part 
time.sleep(1 - right_part)  #and sleep for the remaining portion of this second. 

的睡眠時間是可變的。

是否有「睡眠直到」功能我不知道?或者, 有沒有更好的方法來處理這個問題?

我希望我的守護進程儘可能高效,以免從其他進程中佔用過多的CPU。

謝謝。標記。

+1

你試過用谷歌搜索你的問題的標題(拼寫錯誤已更正)嗎? – TigerhawkT3

+0

[相關問題](https://stackoverflow.com/questions/3886402/python-how-to-get-numbers-after-decimal-point) – ChaimG

回答

8

math.modf()使用

math.modf(x)返回x的整數和小數部分。兩個 結果都帶有x的符號並且是浮點數。

例子:

>>> from math import modf 
>>> modf(3.1234) 
(0.12340000000000018, 3.0) 
5

time.sleep不能保證當你告訴它,它可以是有些不準確醒來準確。

對於小數點後得到的部分,使用模量(%)操作:

>>> 3.5 % 1 
.5 

如:

>>> t = time.time() 
>>> t 
1430963764.102048 
>>> 1 - t % 1 
0.8979520797729492 

至於 「休眠直到」,你可能會喜歡sched模塊,它是圍繞這個想法而建立的:https://docs.python.org/2/library/sched

+0

謝謝德文。我認爲這是完美的。我想當我說「確切地說」時,我的意思是「儘可能接近」。我真正的代碼行現在是time.sleep(1 - time.time()%1)。我喜歡它。 –