繼this後,我已經確定了Windows 7下的Python的time.sleep()函數的非函數實現(Enterprise,64位和Python 3.4.4)。不準確的time.sleep()與Python 3.x和Windows 7
這裏的參考的.py腳本:
import threading, time
def Return():
return
def Setup():
for _ in range(10):
time_before = time.time()
Return()
wait_delay = -time.time()
delays = []
InputFrequency = 60
while (time.time() - time_before) < (1/InputFrequency):
time.sleep(0)
wait_delay += time.time()
delays.append(wait_delay)
print("Output frequency: " + str([1/t for t in delays][0]) + " Hz")
threading.Thread(target=Setup).start()
作爲每this例如,該腳本應該產生的60Hz的大致的輸出頻率。然而,當我的Windows 7企業版的機器上運行,這些都是輸出頻率,我收到了一個給定的輸入頻率:
輸入:爲10Hz - 輸出:9.15Hz
輸入範圍:20Hz - 輸出:16.03赫茲
輸入:30Hz的 - 輸出21.37Hz
輸入範圍:40Hz的 - 6 4赫茲 - 輸出:32.05Hz
輸入範圍:在65Hz - 10kHz的+ - 輸出:64.10Hz
這到底是怎麼回事?爲什麼變化的輸入頻率(40Hz以上)會產生相同的輸出頻率?即使輸入頻率超過10,000Hz,爲什麼輸出頻率上限爲64.10Hz?我不相信這是〜60Hz時的time.sleep()分辨率問題。提供給ideone.com腳本的相同輸入頻率值會產生預期的輸出頻率,因此它必須與我的計算機相關。
您是否檢查過當前版本的python是否有所作爲? – pvg
我沒有,但我剛剛檢查了我的Python 2.7.12安裝,它給出了相同的錯誤輸出頻率。 – jars121
沒錯,但是你的基準是python 3,所以看起來python 3.6可能是一個開始的地方。 – pvg