Spaces:
Sleeping
Sleeping
import json | |
import os | |
from threading import Thread | |
import resource | |
import signal | |
import json | |
import os | |
import traceback | |
from loguru import logger | |
def set_memory_limit(max_memory): | |
def limit_memory(): | |
resource.setrlimit(resource.RLIMIT_AS, (max_memory, max_memory)) | |
return limit_memory | |
def timeout_handler(_, __): | |
raise TimeoutError() | |
def to_jsonl(dict_data, file_path): | |
with open(file_path, 'a') as file: | |
json_line = json.dumps(dict_data) | |
file.write(json_line + os.linesep) | |
class PropagatingThread(Thread): | |
def run(self): | |
self.exc = None | |
try: | |
if hasattr(self, '_Thread__target'): | |
# Thread uses name mangling prior to Python 3. | |
self.ret = self._Thread__target(*self._Thread__args, **self._Thread__kwargs) | |
else: | |
self.ret = self._target(*self._args, **self._kwargs) | |
except Exception as e: | |
self.exc = e | |
def join(self, timeout=None): | |
super(PropagatingThread, self).join(timeout) | |
if self.exc: | |
raise self.exc | |
if self.is_alive(): | |
return None | |
return self.ret | |
def terminate(self): | |
self._stop() | |
def function_with_timeout(func, args, timeout, max_memory=100 * 1024 * 1024): | |
result_container = [] | |
def wrapper(): | |
# set_memory_limit(max_memory)() | |
result_container.append(func(*args)) | |
thread = PropagatingThread(target=wrapper) | |
thread.start() | |
thread.join(timeout) | |
if thread.is_alive(): | |
logger.error(f"Timeout Error\n {args[0]} with timeout {timeout}") | |
thread.terminate() | |
raise TimeoutError() | |
else: | |
return result_container[0] | |