2015-04-01 77 views
3

我編寫了一些代碼,以便隨時間從GPIO獲取傳感器讀數。 爲了確保測量結果符合特定的時間,我想知道python是否以恆定的速度迭代(以便迭代之間的差距是恆定的) - 迭代之間的最小時間差是多少。python是否以恆定速度迭代?

如果他們不是,有人可以讓我知道如何使時間間隔不變。 謝謝!

+0

檢查這件事:https://docs.python.org/2/library/time.html#time.struct_time – ZdaR 2015-04-01 11:45:42

+1

無論語言如何,您都需要一個實時操作系統來保證速度不變。或者,這取決於您的測量需要多麼可靠,因爲運行在通用操作系統上的程序大部分時間都是恆定的速度,但並不總是也沒有保證。 – nos 2015-04-01 11:49:05

回答

10

不,Python不會以恆定速度迭代。

Python只是Raspberry PI上的另一個進程,您的操作系統負責將時間分配給CPU(稱爲multi-tasking)。其他進程也獲得分配時間。這意味着Python永遠不會一直運行,任何處理時間都將取決於其他進程在做什麼。

迭代本身也是授權到特定類型;如何生成下一個項目然後變化很大,即使Python被持續訪問CPU迭代仍然會有所不同。無論你在循環體中做什麼都需要時間,除非輸入和輸出總是完全相同,否則幾乎肯定會花費不同的時間來完成這項工作。

而不是嘗試定時循環,在一個循環中用time.time()timeit.default_timer(取決於你需要的精確度,在你的樹莓上它將是相同的函數)測量時間,並基於此來調整你的動作。

+0

難道這不能推廣到其他語言嗎?因爲它與底層操作系統和調度程序有關,而不是與特定語言相關? – exhuma 2015-04-01 11:50:14

+2

@exhuma:這適用於在通用操作系統上運行的所有語言。您需要[實時操作系統](http://en.wikipedia.org/wiki/Real-time_operating_system)來確保執行時間。 – 2015-04-01 11:50:54

+0

我想知道,OS會在什麼情況下中斷進程?如果沒有異常/中斷,CPU不應該一直運行這個進程嗎? – khajvah 2015-04-01 11:52:17