2013-05-27 63 views
2

如何在Python的特定時間點調用函數?如何在Python中精確給定的時間點調用函數?

例如:

import time 
def foo(): 
    print time.time() 

start_time = time.time() 
expected_time_to_run_foo = start_time + 12.3456 
#invoke foo 

如何使功能foo打印給定值expected_time_to_run_foo

P.S .:我不知道是否time.sleep()有效。我需要更高的精度。

+2

比'time.sleep(12.3456)'更精確嗎?除非你有一個實時的操作系統,否則將會有限制你獲得它的準確度 - 當然不會低至100微秒。 –

+0

是的。因爲'foo'可能需要一些時間才能在print之前運行,恐怕'time.sleep()'不夠精確。 – Skyler

+0

請參閱此處瞭解更多信息:http://stackoverflow.com/questions/1938048/high-precision-clock-in-python –

回答

2

內置調度模塊可讓您安排將來的事件。 (這裏的所有代碼都是Python 3)。

import sched 
import time 

def print_something(x): 
    print(x) 

s = sched.scheduler() 

s.enter(1, 0, print_something, ['first']) 
s.enter(2, 0, print_something, ['second']) 
s.run() 

您可以提供自己的函數來獲取當前時間並等待將來的指定時間。默認值是time.monotonic(time.time的一個調整版本)和time.sleep。

您可以使用獲得稍許的準確性增加忙等,像這樣:

import sched 
import time 

def print_something(x): 
    print(x) 

def busy_wait(target): 
    while time.monotonic() < target: 
     pass 

s = sched.scheduler(delayfunc=busy_wait) 

s.enter(1, 0, print_something, ['first']) 
s.enter(2, 0, print_something, ['second']) 
s.run() 

但是,現實中,有意想不到的延遲這麼多的資源在一個桌面操作系統,如果你的時間限制是如果沒有實時操作系統,你永遠不會得到可以接受的結果。

+0

謝謝。有用。單個錯誤是可以接受的。我只是擔心在這種方法中不會發生的累積錯誤。 – Skyler