From 8d03cfe7f34505063f3604ffe8db86235d33e437 Mon Sep 17 00:00:00 2001 From: Robert Haase Date: Sat, 23 Mar 2024 20:02:43 +0100 Subject: [PATCH] fix windows-related signal issue adapted from: https://github.com/openai/human-eval/issues/18#issuecomment-1609063376 --- human_eval/execution.py | 34 ++++++++++++++++++++++++++-------- 1 file changed, 26 insertions(+), 8 deletions(-) diff --git a/human_eval/execution.py b/human_eval/execution.py index a9fe722..2499809 100644 --- a/human_eval/execution.py +++ b/human_eval/execution.py @@ -98,14 +98,32 @@ def check_correctness(problem: Dict, completion: str, timeout: float, @contextlib.contextmanager def time_limit(seconds: float): - def signal_handler(signum, frame): - raise TimeoutException("Timed out!") - signal.setitimer(signal.ITIMER_REAL, seconds) - signal.signal(signal.SIGALRM, signal_handler) - try: - yield - finally: - signal.setitimer(signal.ITIMER_REAL, 0) + # adaped from: https://github.com/openai/human-eval/issues/18#issuecomment-1609063376 + import os + if os.name == 'posix': # linux + def signal_handler(signum, frame): + raise TimeoutException("Timed out!") + signal.setitimer(signal.ITIMER_REAL, seconds) + signal.signal(signal.SIGALRM, signal_handler) + try: + yield + finally: + signal.setitimer(signal.ITIMER_REAL, 0) + + elif os.name == 'nt': # windows + import threading + timer = threading.Timer(seconds, lambda: (_ for _ in ()).throw(TimeoutException("Timed out!"))) + timer.start() + try: + yield + finally: + timer.cancel() + else: + raise RuntimeError("Operating system not supported") + + +class TimeoutException(Exception): + pass @contextlib.contextmanager