2013-05-27 4 views
2

파이썬에서 정확하게 특정 시점에 함수를 호출하는 방법은 무엇입니까? 예를 들어파이썬에서 정확히 주어진 시점에 함수를 호출하는 방법은 무엇입니까?

:

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 수 있도록?

추신 : 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

내장 된 sched 모듈을 사용하면 앞으로 이벤트를 스케줄 할 수 있습니다. (모든 코드는 파이썬 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입니다. 예상치 못한 지연의 많은 소스가 타이밍 제약하는 경우하는 데스크톱 OS에있다, 현실적으로

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() 

을하지만 :

당신은 사용하여 약간의 정확도 증가를 얻을과 같이, 바쁜-기다릴 수 실시간 OS 없이는 만족할만한 결과를 얻지 못할 것입니다.

+0

. 그것은 작동합니다. 단일 오류는 허용됩니다. 나는이 접근법에서 발생하지 않을 누적 된 오류에 대해 걱정했다. – Skyler

관련 문제