| |
|
| | def timeout_handler(_, __): |
| | raise TimeoutError() |
| |
|
| | import os, json |
| | 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) |
| |
|
| | from threading import Thread |
| | class PropagatingThread(Thread): |
| | def run(self): |
| | self.exc = None |
| | try: |
| | if hasattr(self, '_Thread__target'): |
| | |
| | self.ret = self._Thread__target(*self._Thread__args, **self._Thread__kwargs) |
| | else: |
| | self.ret = self._target(*self._args, **self._kwargs) |
| | except BaseException as e: |
| | self.exc = e |
| |
|
| | def join(self, timeout=None): |
| | super(PropagatingThread, self).join(timeout) |
| | if self.exc: |
| | raise self.exc |
| | return self.ret |
| | |
| |
|
| | def function_with_timeout(func, args, timeout): |
| | result_container = [] |
| |
|
| | def wrapper(): |
| | result_container.append(func(*args)) |
| |
|
| | thread = PropagatingThread(target=wrapper) |
| | thread.start() |
| | thread.join(timeout) |
| |
|
| | if thread.is_alive(): |
| | raise TimeoutError() |
| | else: |
| | return result_container[0] |
| |
|
| |
|
| |
|