From 10b16082cdf784616036e3465623ee32455f88e7 Mon Sep 17 00:00:00 2001 From: YANG Xudong Date: Mon, 3 Sep 2018 12:32:40 +0900 Subject: [PATCH 1/2] Add timer timeout implementation for windows. --- lambda_local/timeout.py | 28 ++++++++++++++++++++-------- 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/lambda_local/timeout.py b/lambda_local/timeout.py index afd85c1..17646c3 100644 --- a/lambda_local/timeout.py +++ b/lambda_local/timeout.py @@ -4,7 +4,9 @@ ''' import signal +import threading from contextlib import contextmanager +from six.moves import _thread class TimeoutException(Exception): @@ -13,11 +15,21 @@ class TimeoutException(Exception): @contextmanager def time_limit(seconds): - def signal_handler(signum, frame): - raise TimeoutException("Timeout after {} seconds.".format(seconds)) - signal.signal(signal.SIGALRM, signal_handler) - signal.alarm(seconds) - try: - yield - finally: - signal.alarm(0) + if hasattr(signal, "SIGALRM"): + def signal_handler(signum, frame): + raise TimeoutException("Timeout after {} seconds.".format(seconds)) + signal.signal(signal.SIGALRM, signal_handler) + signal.alarm(seconds) + try: + yield + finally: + signal.alarm(0) + else: + timer = threading.Timer(seconds, lambda: _thread.interrupt_main()) + timer.start() + try: + yield + except KeyboardInterrupt: + raise TimeoutException("Timeout after {} seconds.".format(seconds)) + finally: + timer.cancel() From fa0e3a8ee67287ff560a061ab8afdcffa815bf14 Mon Sep 17 00:00:00 2001 From: Iskandar Setiadi Date: Mon, 3 Sep 2018 15:09:20 +0900 Subject: [PATCH 2/2] Bump version to 0.1.6 --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index d6d48ad..595797c 100644 --- a/setup.py +++ b/setup.py @@ -22,7 +22,7 @@ def run_tests(self): sys.exit(pytest.main(self.test_args)) -version = "0.1.5" +version = "0.1.6" setup(name="python-lambda-local", version=version,