2014-12-17 5 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 секунд.run python scheduler непрерывно

Я хочу знать, что как я мог бы выполнять print_time() функция точно с 5-секундным периодом времени непрерывно (периодически) без остановки.

+0

Взгляните на [cron jobs] (http://en.wikipedia.org/wiki/Крон). Мне кажется, это то, что вы пытаетесь воссоздать. – Lix

+0

Я знаю о работе cron. но я не могу использовать задания cron для этой задачи. задача периодического выполнения должна обрабатываться самим сценарием – 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() 

ВЫХОДНОЙ:

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

ВЫВОД:

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

вы можете использовать нить, которая спит 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() 

Если вы хотите запустить это "навсегда" - просто удалить состояние разрыва ...

Смежные вопросы