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