[英]How does python threading.Timer determine elapsed time?
我正在虛擬機中進行一些實驗,如果該虛擬機處於暫停狀態,則會更新其系統時間。 我想知道是否可以掛起虛擬機並且不影響計時器。 也就是說,Timer使用系統時間還是牆上時間?
我嘗試遍歷源代碼並在代碼浸入C _thread.lock.acquire
之前進入_thread.lock.acquire
。
下面是我的代碼。 我委托給輸出“計划”的子流程。 我一直在收集這些計划,直到找到最佳計划或最長允許時間過去為止。 如果時間用完(這是預期的事務狀態),則使用計時器終止進程。 我需要知道, Timer
不會受到系統時間更新的影響,因為它將使我正在運行的實驗無效。
p = Popen(args, stdout=PIPE, cwd=self.working_directory)
timer = Timer(float(self.planning_time), p.terminate)
timer.start()
plan = None
while True:
try:
plan = list(decode_plan_from_optic(self.decode(p.stdout),
report_incomplete_plan=True))
except IncompletePlanException:
break
timer.cancel()
通過檢查* unix it系統的python源代碼,我發現python最終取決於支持將semaphore.h
委托給sem_timedwait
或pthread.h
委托給了pthread_cond_timedwait
。 無論哪種方式,這兩個函數struct timespec
從time.h
獲取struct timespec
作為等待直到的絕對時間-timespec是距該紀元以來的秒數和納秒數。
因此,從表面上看來,在python中等待取決於系統時間-這意味着我的程序將受到系統時間變化的影響。 但是,如果需要單調遞增的時鍾,則time.h
指定常量CLOCK_MONOTONIC_RAW
和函數clock_gettime
。 顯示有一種獨立於系統時間進行等待的能力。 但是,可悲的是,python使用的gettimeofday
(自2008年以來已過時)已受到系統時間更改的影響。
簡而言之,* unix系統上的python等待會受系統時間的更改影響。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.