Python中time.sleep(0.001)是否真的只等待1毫秒
time.sleep(0.001)真的只等待1毫秒?
在windows上,進(jìn)行簡(jiǎn)單的編程驗(yàn)證上述問(wèn)題。
import time
while True:
st = time.time()
time.sleep(0.001)
et = time.time()
print('dt={dt}'.format(dt=et - st))返回結(jié)果
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
…
- 大部分時(shí)長(zhǎng)都在2ms左右。
- 而且即便將
0.001改至更小,仍是2ms,這與操作系統(tǒng)有關(guān),具體機(jī)制未做深入研究。 - 如果需要精確定時(shí)需要注意這個(gè)問(wèn)題。
下面的代碼用在接收線程中
- 當(dāng)連續(xù)1秒鐘沒(méi)有數(shù)據(jù)是會(huì)拋出警告
- 由于需要響應(yīng)外部stop或者pause操作
- 所以sleep的時(shí)間片段都不能太長(zhǎng)
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不準(zhǔn)確,導(dǎo)致最早no_frame_time與實(shí)際值誤差特別大
et = time.time() - st
no_frame_time += et # 此處是累積時(shí)間
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
# ... 省略任務(wù)主體
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
python中pd.cut()與pd.qcut()的對(duì)比及示例
本文主要介紹了python中pd.cut()與pd.qcut()的對(duì)比及示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-06-06
Python?hug庫(kù)構(gòu)建快速可擴(kuò)展的Web API框架使用詳解
這篇文章主要介紹了Python?hug庫(kù)構(gòu)建快速可擴(kuò)展的Web API框架使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2024-02-02
如何使用matplotlib讓你的數(shù)據(jù)更加生動(dòng)
數(shù)據(jù)可視化用于以更直接的表示方式顯示數(shù)據(jù),并且更易于理解,下面這篇文章主要給大家介紹了關(guān)于如何使用matplotlib讓你的數(shù)據(jù)更加生動(dòng)的相關(guān)資料,需要的朋友可以參考下2021-11-11
Python子進(jìn)程subpocess原理及用法解析
這篇文章主要介紹了Python子進(jìn)程subpocess原理及用法解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-07-07

