(time, message)
| 28 | |
| 29 | @contextmanager |
| 30 | def timeout(time, message): |
| 31 | timer = None |
| 32 | try: |
| 33 | timer = Timer(time, interrupt_main) |
| 34 | timer.daemon = True |
| 35 | timer.start() |
| 36 | yield |
| 37 | except KeyboardInterrupt as e: |
| 38 | if timer is not None and timer.is_alive(): |
| 39 | raise e # interrupt from user? |
| 40 | raise TimeoutError(message) from e |
| 41 | finally: |
| 42 | if timer is not None: |
| 43 | try: |
| 44 | timer.cancel() |
| 45 | finally: |
| 46 | pass |
| 47 | |
| 48 | |
| 49 | def load_module( |
no test coverage detected
searching dependent graphs…