Difference between revisions of "Implementing Timers in Python"
Jump to navigation
Jump to search
PeterHarding (talk | contribs) |
PeterHarding (talk | contribs) |
||
Line 54: | Line 54: | ||
</pre> | </pre> | ||
=Using pywin= | |||
<pre> | |||
#!/usr/bin/env python | |||
try: | |||
import os | |||
import sys | |||
import time | |||
import msvcrt | |||
import winsound | |||
except ImportError, error: | |||
sys.stdout.write('ImportError: %s' % error) | |||
sys.exit(1) | |||
def main(): | |||
try: | |||
alarm(*map(float, sys.argv[1:])) | |||
except: | |||
sys.stdout.write(os.path.basename(sys.argv[0])) | |||
sys.stdout.write(' <hours> <minutes> <seconds>') | |||
def alarm(hours, minutes, seconds): | |||
time.sleep(abs(hours * 3600 + minutes * 60 + seconds)) | |||
while msvcrt.kbhit(): | |||
msvcrt.getch() | |||
while not msvcrt.kbhit(): | |||
winsound.Beep(440, 250) | |||
time.sleep(0.25) | |||
if __name__ == '__main__': | |||
main() | |||
</pre> | |||
[[Category:Python]] | [[Category:Python]] | ||
[[Category:Testing]] | [[Category:Testing]] | ||
[[Category:Development]] | [[Category:Development]] |
Latest revision as of 18:13, 2 May 2008
Using UNIX Like Functionality
This script makes use of UNIX derived signal methods.
import signal, time class TimedOutExc(Exception): def __init__(self, value = "Timed Out"): self.value = value def __str__(self): return repr(self.value) def TimedOutFn(f, timeout, *args, **kwargs): def handler(signum, frame): raise TimedOutExc() old = signal.signal(signal.SIGALRM, handler) signal.alarm(timeout) try: result = f(*args, **kwargs) finally: signal.signal(signal.SIGALRM, old) signal.alarm(0) return result def timed_out(timeout): def decorate(f): def handler(signum, frame): raise TimedOutExc() def new_f(*args, **kwargs): old = signal.signal(signal.SIGALRM, handler) signal.alarm(timeout) try: result = f(*args, **kwargs) finally: signal.signal(signal.SIGALRM, old) signal.alarm(0) return result new_f.func_name = f.func_name return new_f return decorate def fn_1(secs): time.sleep(secs) return "Finished" @timed_out(4)
Using pywin
#!/usr/bin/env python try: import os import sys import time import msvcrt import winsound except ImportError, error: sys.stdout.write('ImportError: %s' % error) sys.exit(1) def main(): try: alarm(*map(float, sys.argv[1:])) except: sys.stdout.write(os.path.basename(sys.argv[0])) sys.stdout.write(' <hours> <minutes> <seconds>') def alarm(hours, minutes, seconds): time.sleep(abs(hours * 3600 + minutes * 60 + seconds)) while msvcrt.kbhit(): msvcrt.getch() while not msvcrt.kbhit(): winsound.Beep(440, 250) time.sleep(0.25) if __name__ == '__main__': main()