I want to execute a task every 2 hours. Python has a Timer in Threading module, but does it meet my needs? How do I generate a proper Timer myself?
-
2Do you want to execute a task every two hours, or do you want a Python script to do something every two hours?Ignacio Vazquez-Abrams– Ignacio Vazquez-Abrams2010-11-11 09:39:53 +00:00Commented Nov 11, 2010 at 9:39
-
To call another python function every 2 hrspat.inside– pat.inside2010-11-11 11:39:24 +00:00Commented Nov 11, 2010 at 11:39
Add a comment
|
2 Answers
If you want your code to be run every 2 hours the easiest way would be using cron or a similar scheduler depending on your operating system
if you want your programm to call a function every n seconds ( 7200 in your case ) you could use a thread and event.wait. The following example starts a timer that is triggered every second and prints a string to stdout
import threading
import time
class TimerClass(threading.Thread):
def __init__(self):
threading.Thread.__init__(self)
self.event = threading.Event()
def run(self):
while not self.event.is_set():
print "do something"
self.event.wait( 1 )
def stop(self):
self.event.set()
tmr = TimerClass()
tmr.start()
time.sleep( 10 )
tmr.stop()
3 Comments
Nikolaus Gradwohl
@wok why? start is called once and used to do the setup, run is the method that does the work you want to do
Wok
My mistake about the inheritance.
Shang Wang
@NikolausGradwohl: expert solution! I was doing something similar but instead of using event, I passed a Queue object into that thread, and if timeout, I put something into that queue, and then the work thread can quit(work thread keeps checking the queue, if nothing, increment an integer by 1 for test purpose). However, after I run my program, the work thread will wait, but when it quits, I got no increment at all. Any idea what happened? Thanks.