连续运行python调度程序

时间:2014-12-17 09:59:55

标签: python scheduled-tasks

 #!/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()

以上代码可用于在5秒10秒内完成print_time()功能。

我想知道如何在不停止的情况下连续(定期)以5秒的时间段完全执行print_time()功能。

3 个答案:

答案 0 :(得分: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()函数的最开头,添加了调度程序队列的另一个条目,在这种情况下,精度非常高

答案 1 :(得分:1)

你可以使用一个睡眠时间为5秒的线程:

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

如果你想“永远”运行它 - 只需删除中断条件......

答案 2 :(得分: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()

输出:

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

如果你只想延迟5秒钟来调用函数print_time(),那么请尝试以下

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

输出:

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