2014-12-17 3 views
0
#!/usr/bin/python 
import sched, time 
s = sched.scheduler(time.time, time.sleep) 
def print_time():  
    print "From print_time", time.time() 

def print_some_times(): 
    print time.time() 
    s.enter(5, 1, print_time,()) 
    s.enter(10, 1, print_time,()) 
    s.run() 

print_some_times() 

위의 코드는 print_time() 함수를 정확히 5 초와 10 초 내에 실행할 수 있습니다.파이썬 스케줄러를 연속적으로 실행

print_time()이 멈춤없이 연속적으로 (주기적으로) 5 초의 시간 간격으로 정확히 어떻게 작동하는지 알고 싶습니다.

+0

[cron jobs] (http://en.wikipedia.org/wiki/Cron). 이렇게 나에게 소리가 나는 것은 당신이 재현하려는 것입니다. – Lix

+0

크론 작업에 대해 알고 있습니다. 하지만 난이 작업에 대한 크론 작업을 사용할 수 없습니다. 주기적으로 실행 작업은 스크립트 자체에 의해 처리되어야합니다. – tnishada

+0

'time.sleep()'을 시도 했습니까? –

답변

2

time.sleep() 함수가 작동하더라도 정확하지 않습니다. 아래 코드를 고려하십시오.

while True: 
    time.sleep(5) 
    print_time() 

이 함수는 항상 실행을 5 초 지연시킵니다. print_time() 함수는 실행을 위해 2 초를 소비한다고 가정합니다. 이 메소드의 print_time에있어서() 함수가 7 초 (5 + 2)

그러나 응답이 코드 다음 여기 일어나는

#!/usr/bin/python 
import sched, time 
s = sched.scheduler(time.time, time.sleep) 
def print_time(): 
    s.enter(5, 1, print_time,()) 
    print "From print_time", time.time() 

def print_some_times(): 
    print time.time() 
    s.enter(5, 1, print_time,())   
    s.run() 

print_some_times() 

인 경유를 수행하여 더욱 정확하게 얻을 수있다 주기로 호출 print_time() 함수가 실행될 때. print_time() 함수의 맨 처음에 스케쥴러 대기열의 다른 항목이 추가됩니다.이 경우 정확도는 매우 높습니다.

0

나는 당신과 함께 갈 수 있다고 생각한다 time.sleep()이 함수에 전달 된 매개 변수는 프로그램을 일시 중지 할 수있는 정확한 시간 (초)입니다.

import time 
time.sleep(5) ## pauses for 5 seconds. 

내가 바로 당신을 돕고 경우 나도 몰라하지만 당신이

import sched, time 
s = sched.scheduler(time.time, time.sleep) 
def print_time(): 
    var =10 
    var = "fdfd" 
    print "From print_time", time.time() 
def print_some_times(): 
    print time.time() 
    s.enter(5, 1, print_time,()) 
    s.enter(10, 1, print_time,()) 
    s.run() 

while True: 
    time.sleep(5) 
    print_some_times() 

OUTPUT 찾고있는 경우에는 다음과 같이 시도 할 수 있습니다 :

1418811191.3 
From print_time 1418811196.31 
From print_time 1418811201.3 
1418811206.31 
From print_time 1418811211.34 
From print_time 1418811216.32 

함수가 print_time()이고 지연 시간이 5 초이므로 영원히 다음을 시도하십시오.

import sched, time 
s = sched.scheduler(time.time, time.sleep) 
def print_time(): 
    var =10 
    var = "fdfd" 
    print "From print_time", time.time() 
def print_some_times(): 
    print time.time() 
    s.enter(5, 1, print_time,()) 
    s.enter(10, 1, print_time,()) 
    s.run() 

while True: 
    time.sleep(5) 
    print_time() 

출력 : 5 초 자고 스레드 사용할 수 있습니다

From print_time 1418811465.18 
From print_time 1418811470.2 
From print_time 1418811475.27 
From print_time 1418811480.27 
From print_time 1418811485.27 
0

:이 "영원히"실행하려면

import threading, time 

def worker(): 
    i = 0 
    while (True): 
     print 'do something ... ' + str(time.time()) 
     time.sleep(5) 
     i += 1 
     if i > 5: break 

t = threading.Thread(target=worker) 
print time.time() 
t.start() 
print time.time() 

을 - 휴식 상태를 바로 제거 ...

관련 문제