Skip to content

Instantly share code, notes, and snippets.

@goulu
Last active September 14, 2015 13:30
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save goulu/45329ef041a368a663e5 to your computer and use it in GitHub Desktop.
Save goulu/45329ef041a368a663e5 to your computer and use it in GitHub Desktop.
multiplatform timeout for loops in Python
from threading import Timer
from multiprocessing import TimeoutError
def itimeout(iterable,timeout):
"""timeout for loops
:param iterable: any iterable
:param timeout: float max running time in seconds
:yield: items in iterator until timeout occurs
:raise: multiprocessing.TimeoutError if timeout occured
"""
timer=Timer(timeout,lambda:None)
timer.start()
for i in iterable:
yield i
if timer.finished.is_set():
raise TimeoutError
@goulu
Copy link
Author

goulu commented Sep 14, 2015

usage:

  try:
    for i in itimeout(itertools.count(),10): # count as fast as possible for 10 seconds
      pass
  except TimeoutError:
    print('could count till',i)

can anybody turn this into a decorator that could be used as:

  try:
    @itimeout(10)
    for i in itertools.count(): pass
  except TimeoutError:
    print('could count till',i)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment