[Tutor] Python Timer

Christian Wyglendowski Christian.Wyglendowski at greenville.edu
Tue Nov 16 18:15:04 CET 2004


[line wrapped mess snipped]

Ugh...here is my reply without the comments which wrapped and made it
unreadable... (commented text file attached)

------------------------------------------------------------------------

Hi Joe,

With all the great talk about threads going on, I thought it might be
fun to make a simple threaded timer.  Here is what I typed into the
Pythonwin shell:

>>> import time
>>> import threading
>>> class Timer(threading.Thread):
... 	def __init__(self, seconds):
... 		self.runTime = seconds
... 		threading.Thread.__init__(self)
... 	def run(self):
... 		time.sleep(self.runTime)
... 		print "Buzzzz!! Time's up!"
... 		
>>> t = Timer(10)
>>> t.start()
>>> Buzzzz!! Time's up!

There is a very simple (and pretty useless) timer.  I reread your
question though and noticed that you want the timer to "print to the
console".  I don't know if this is the best way, but we can use the
simple Timer class above to build a CountDownTimer.

>>> class CountDownTimer(Timer):
... 	def run(self):
... 		counter = self.runTime
... 		for sec in range(self.runTime):
... 			print counter
... 			time.sleep(1.0)
... 			counter -= 1
... 		print "Done."
... 		
>>> c = CountDownTimer(10)
>>> c.start()
10
>>> 9
8
7
6
5
4
3
2
1
Done.

So there we have a timer that counts down the seconds and prints them to
the screen.  More interesting than the first timer, but not by much.
Here is a final implementation that allows you to pass an action to
execute at the end of the timer run.

>>> class CountDownExec(CountDownTimer):
... 	def __init__(self, seconds, action):
... 		self.action = action
... 		CountDownTimer.__init__(self, seconds)
... 	def run(self):
... 		CountDownTimer.run(self)
... 		self.action()
... 		
>>> def myAction():
... 	print "Performing my action..."
... 	
>>> c = CountDownExec(10, myAction)
>>> c.start()
10
>>> 9
8
7
6
5
4
3
2
1
Done.
Performing my action...

CountDownExec could be expanded to allow for arguments to be passed to
the action, but unfortunately I am out of time on this email!

HTH,

Christian
http://www.dowski.com
-------------- next part --------------
> -----Original Message-----
> [mailto:tutor-bounces at python.org] On Behalf Of Joe Chiocchi
> Subject: [Tutor] Python Timer
> 
> Hello, I was wondering if it were possible to make a timer in the 
> console. It would be a simple timer just to count down seconds.
> The only timers I found were made with Tkinter and I am in need of one 
> that prints to the console. Thanks

Hi Joe,

With all the great talk about threads going on, I thought it might be fun to make a simple threaded timer.  Here is what I typed into the Pythonwin shell:

>>> import time
>>> import threading
>>> class Timer(threading.Thread):			#subclass Thread
... 	def __init__(self, seconds):			#make it possible to pass the time in seconds that we want the timer to run
... 		self.runTime = seconds			#set our runTime in seconds
... 		threading.Thread.__init__(self)	#call the Thread's constructor
... 	def run(self):					#define what we want our Timer thread to do
... 		time.sleep(self.runTime)		#have it sleep for runTime seconds
... 		print "Buzzzz!! Time's up!"		#print a message when done
... 		
>>> t = Timer(10)
>>> t.start()						#ten seconds go by ...
>>> Buzzzz!! Time's up!

There is a very simple (and pretty useless) timer.  I reread your question though and noticed that you want the timer to "print to the console".  I don't know if this is the best way, but we can use the simple Timer class above to build a CountDownTimer.

>>> class CountDownTimer(Timer):			#inherit from our simple Timer which initializes all that we need
... 	def run(self):					#setup our new action, overriding the simple action in Timer
... 		counter = self.runTime			#inititialize a counter variable
... 		for sec in range(self.runTime):	#start a loop over a range that is self.runTime elements long
... 			print counter			#output value of counter
... 			time.sleep(1.0)			# ZZZZzzzz... (sleep for one second)
... 			counter -= 1			#decrement our counter variable by 1
... 		print "Done."				#print this once the loop above is complete
... 		
>>> c = CountDownTimer(10)
>>> c.start()
10
>>> 9
8
7
6
5
4
3
2
1
Done.

So there we have a timer that counts down the seconds and prints them to the screen.  More interesting than the first timer, but not by much.  Here is a final implementation that allows you to pass an action to execute at the end of the timer run.

>>> class CountDownExec(CountDownTimer):			#now we subclass CountDownTimer
... 	def __init__(self, seconds, action):		#we need to accept seconds as well as an action as arguments
... 		self.action = action				#set our timer's action
... 		CountDownTimer.__init__(self, seconds)	#setup the rest of the timer from CountDownTimer
... 	def run(self):						#we need to modify run to perform the action
... 		CountDownTimer.run(self)			#first we run the standard CountDownTimer routine, as it still works
... 		self.action()					#then we do our action
... 		
>>> def myAction():						#we need an action, right?
... 	print "Performing my action..."			#boring, but simple
... 	
>>> c = CountDownExec(10, myAction)
>>> c.start()
10
>>> 9
8
7
6
5
4
3
2
1
Done.
Performing my action...

CountDownExec could be expanded to allow for arguments to be passed to the action, but unfortunately I am out of time on this email!

HTH,

Christian
http://www.dowski.com


More information about the Tutor mailing list