py.lib
py.lib/Alarm.py
. Рефакторинг бессмысленный и беспощадный
| awgur@13 | 1 #!/usr/bin/python |
| awgur@13 | 2 # -*- coding: utf-8 -*- |
| awgur@13 | 3 |
| awgur@13 | 4 from signal import SIGALRM, alarm, signal |
| awgur@13 | 5 |
| awgur@23 | 6 |
| awgur@13 | 7 class AlarmTimeout(Exception): pass |
| awgur@13 | 8 |
| awgur@23 | 9 |
| awgur@13 | 10 def _handler(sig, frame): |
| awgur@13 | 11 raise AlarmTimeout('Operation timeout') |
| awgur@13 | 12 |
| awgur@23 | 13 |
| awgur@23 | 14 class Alarm(object): |
| awgur@13 | 15 def __init__(self, timeout): |
| awgur@13 | 16 signal(SIGALRM, _handler) |
| awgur@13 | 17 alarm(timeout) |
| awgur@13 | 18 |
| awgur@13 | 19 def __enter__(self): |
| awgur@13 | 20 pass |
| awgur@13 | 21 |
| awgur@23 | 22 def __exit__(self, e_type, e_obj, tb): |
| awgur@23 | 23 if e_obj is None: |
| awgur@13 | 24 alarm(0) |
| awgur@13 | 25 |
| awgur@13 | 26 def __del__(self): |
| awgur@13 | 27 alarm(0) |
| awgur@13 | 28 |