mirror of
https://github.com/danswer-ai/danswer.git
synced 2025-06-06 04:59:24 +02:00
* wip checkpointing/continue on failure more stuff for checkpointing Basic implementation FE stuff More checkpointing/failure handling rebase rebase initial scaffolding for IT IT to test checkpointing Cleanup cleanup Fix it Rebase Add todo Fix actions IT Test more Pagination + fixes + cleanup Fix IT networking fix it * rebase * Address misc comments * Address comments * Remove unused router * rebase * Fix mypy * Fixes * fix it * Fix tests * Add drop index * Add retries * reset lock timeout * Try hard drop of schema * Add timeout/retries to downgrade * rebase * test * test * test * Close all connections * test closing idle only * Fix it * fix * try using null pool * Test * fix * rebase * log * Fix * apply null pool * Fix other test * Fix quality checks * Test not using the fixture * Fix ordering * fix test * Change pooling behavior
19 lines
695 B
Python
19 lines
695 B
Python
import multiprocessing
|
|
from collections.abc import Callable
|
|
from typing import Any
|
|
from typing import TypeVar
|
|
|
|
T = TypeVar("T")
|
|
|
|
|
|
def run_with_timeout(task: Callable[..., T], timeout: int, kwargs: dict[str, Any]) -> T:
|
|
# Use multiprocessing to prevent a thread from blocking the main thread
|
|
with multiprocessing.Pool(processes=1) as pool:
|
|
async_result = pool.apply_async(task, kwds=kwargs)
|
|
try:
|
|
# Wait at most timeout seconds for the function to complete
|
|
result = async_result.get(timeout=timeout)
|
|
return result
|
|
except multiprocessing.TimeoutError:
|
|
raise TimeoutError(f"Function timed out after {timeout} seconds")
|