簡體   English   中英

python threading.Timer如何確定經過的時間?

[英]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_timedwaitpthread.h委托給了pthread_cond_timedwait 無論哪種方式,這兩個函數struct timespectime.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM