Run certain code every n seconds
--------------------------------------------------
Hire the world's top talent on demand or became one of them at Toptal: https://topt.al/25cXVn
and get $2,000 discount on your first invoice
--------------------------------------------------
Music by Eric Matyas
https://www.soundimage.org
Track title: Puzzle Game Looping
--
Chapters
00:00 Run Certain Code Every N Seconds
00:30 Answer 1 Score 30
00:47 Accepted Answer Score 442
00:59 Answer 3 Score 159
01:59 Answer 4 Score 34
02:14 Thank you
--
Full question
https://stackoverflow.com/questions/3393...
--
Content licensed under CC BY-SA
https://meta.stackexchange.com/help/lice...
--
Tags
#python #multithreading
#avk47
Hire the world's top talent on demand or became one of them at Toptal: https://topt.al/25cXVn
and get $2,000 discount on your first invoice
--------------------------------------------------
Music by Eric Matyas
https://www.soundimage.org
Track title: Puzzle Game Looping
--
Chapters
00:00 Run Certain Code Every N Seconds
00:30 Answer 1 Score 30
00:47 Accepted Answer Score 442
00:59 Answer 3 Score 159
01:59 Answer 4 Score 34
02:14 Thank you
--
Full question
https://stackoverflow.com/questions/3393...
--
Content licensed under CC BY-SA
https://meta.stackexchange.com/help/lice...
--
Tags
#python #multithreading
#avk47
ACCEPTED ANSWER
Score 442
import threading
def printit():
threading.Timer(5.0, printit).start()
print "Hello, World!"
printit()
# continue with the rest of your code
https://docs.python.org/3/library/threading.html#timer-objects
ANSWER 2
Score 159
My humble take on the subject, a generalization of Alex Martelli's answer, with start() and stop() control:
from threading import Timer
class RepeatedTimer(object):
def __init__(self, interval, function, *args, **kwargs):
self._timer = None
self.interval = interval
self.function = function
self.args = args
self.kwargs = kwargs
self.is_running = False
self.start()
def _run(self):
self.is_running = False
self.start()
self.function(*self.args, **self.kwargs)
def start(self):
if not self.is_running:
self._timer = Timer(self.interval, self._run)
self._timer.start()
self.is_running = True
def stop(self):
self._timer.cancel()
self.is_running = False
Usage:
from time import sleep
def hello(name):
print "Hello %s!" % name
print "starting..."
rt = RepeatedTimer(1, hello, "World") # it auto-starts, no need of rt.start()
try:
sleep(5) # your long-running job goes here...
finally:
rt.stop() # better in a try/finally block to make sure the program ends!
Features:
- Standard library only, no external dependencies
start()andstop()are safe to call multiple times even if the timer has already started/stopped- function to be called can have positional and named arguments
- You can change
intervalanytime, it will be effective after next run. Same forargs,kwargsand evenfunction!
ANSWER 3
Score 34
Save yourself a schizophrenic episode and use the Advanced Python scheduler:
The code is so simple:
from apscheduler.scheduler import Scheduler
sched = Scheduler()
sched.start()
def some_job():
print "Every 10 seconds"
sched.add_interval_job(some_job, seconds = 10)
....
sched.shutdown()
ANSWER 4
Score 30
def update():
import time
while True:
print 'Hello World!'
time.sleep(5)
That'll run as a function. The while True: makes it run forever. You can always take it out of the function if you need.