Lestat
Июнь 27, 2007 13:25:42
Как сделать что бы программа написанная на питоне запускалась в определенное время, скажем через каждые 2 часа?
pythonwin
Июнь 27, 2007 13:32:21
Lestat
Как сделать что бы программа написанная на питоне запускалась в определенное время, скажем через каждые 2 часа?
какая ОС?
в винде поставь в автозагрузку на определенное время, а в linux в hron
Lestat
Июнь 27, 2007 13:35:55
а можно ли в самой програме вызвать скажем там какойто модуль с помощью которого можно задать чтобы программа запускалась через определенное время?
nss
Июнь 27, 2007 14:00:04
import time
while True:
run_program()
sleep(some_time)
pythonwin
Июнь 27, 2007 14:01:54
nss
import time
while True:
run_program()
sleep(some_time)
можно и так, но тогда в самом цикле тогда не будет возможности выполнять ещё какой-либо код
Cleric
Июнь 29, 2007 01:31:27
вот тебе зарисовка:
import sched, time
from threading import Thread
from copy import copy
class SchedulerThread(Thread):
def __init__(self):
Thread.__init__(self)
self.scheduler = sched.scheduler(time.time, time.sleep)
self.__ssTasks =
self.__times = {}
def add(self, action, delaytime, singleShot=False, priority=1, *args):
event = self.scheduler.enter(delaytime, priority, action, args)
if(singleShot):
self.__ssTasks.append(event)
self.__times = delaytime
return event
def cancel(self, event):
self.scheduler.cancel(event)
def run(self):
while True:
queue = copy(self.scheduler.queue)
self.scheduler.run()
for task in self.__ssTasks:
try:
inx = queue.index(task)
del self.__times
del queue
except (IndexError, KeyError):
pass
self.__ssTasks =
for task in queue:
time, priority, action, args = task
delaytime = self.__times
event = self.scheduler.enter(delaytime, priority, action, args)
self.__times = delaytime
и для тестирования:
scheduler = SchedulerThread()
def print_time(x):
print “print_time%i:” % x, time.time()
def test():
scheduler.add(print_time,10,False,1,(1))
scheduler.add(print_time,7,False,1,(2))
scheduler.start()
test()
print “leave test():”, time.time()
Остоется только немного попилить и добавить синхронизацию.