Python中time.sleep(0.001)是否真的只等待1毫秒
更新時間:2024年06月24日 08:58:51 作者:babybin
這篇文章主要介紹了Python中time.sleep(0.001)是否真的只等待1毫秒,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
time.sleep(0.001)真的只等待1毫秒?
在windows上,進行簡單的編程驗證上述問題。
import time while True: st = time.time() time.sleep(0.001) et = time.time() print('dt={dt}'.format(dt=et - st))
返回結果
dt=0.001966238021850586
dt=0.001010894775390625
dt=0.0020058155059814453
dt=0.0010018348693847656
dt=0.001966238021850586
dt=0.0020215511322021484
dt=0.0019714832305908203
dt=0.0010178089141845703
dt=0.0019807815551757812
dt=0.0010159015655517578
dt=0.001965761184692383
…
- 大部分時長都在2ms左右。
- 而且即便將
0.001
改至更小,仍是2ms,這與操作系統(tǒng)有關,具體機制未做深入研究。 - 如果需要精確定時需要注意這個問題。
下面的代碼用在接收線程中
- 當連續(xù)1秒鐘沒有數據是會拋出警告
- 由于需要響應外部stop或者pause操作
- 所以sleep的時間片段都不能太長
no_frame_time = 0 while True: if self._stop: logger.info(f"xxxx stop.") break if self._pause: time.sleep(0.01) continue if len(self.msg_deque) == 0: st = time.time() time.sleep(0.001) # no_frame_time += 0.001 # 這寫法由于sleep不準確,導致最早no_frame_time與實際值誤差特別大 et = time.time() - st no_frame_time += et # 此處是累積時間 if no_frame_time > 1: logging.warning("xxxx not arrived in last second.") self.fps_signal.emit(0) no_frame_time = 0 continue else: no_frame_time = 0 # ... 省略任務主體
總結
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
Python3創(chuàng)建Django項目的幾種方法(3種)
這篇文章主要介紹了Python3創(chuàng)建Django項目的幾種方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-06-06python中使用xlrd讀excel使用xlwt寫excel的實例代碼
這篇文章主要介紹了python中使用xlrd讀excel使用xlwt寫excel的實例代碼,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2018-01-01