summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--searx/plugins/calculator.py36
1 files changed, 17 insertions, 19 deletions
diff --git a/searx/plugins/calculator.py b/searx/plugins/calculator.py
index af44eea1e..5adaaaf22 100644
--- a/searx/plugins/calculator.py
+++ b/searx/plugins/calculator.py
@@ -40,6 +40,22 @@ class SXNGPlugin(Plugin):
preference_section="general",
)
+ def timeout_func(self, timeout, func, *args, **kwargs):
+ que = mp_fork.Queue()
+ p = mp_fork.Process(target=handler, args=(que, func, args), kwargs=kwargs)
+ p.start()
+ p.join(timeout=timeout)
+ ret_val = None
+ # pylint: disable=used-before-assignment,undefined-variable
+ if not p.is_alive():
+ ret_val = que.get()
+ else:
+ self.log.debug("terminate function (%s: %s // %s) after timeout is exceeded", func.__name__, args, kwargs)
+ p.terminate()
+ p.join()
+ p.close()
+ return ret_val
+
def post_search(self, request: "SXNG_Request", search: "SearchWithPlugins") -> EngineResults:
results = EngineResults()
@@ -72,7 +88,7 @@ class SXNGPlugin(Plugin):
query_py_formatted = query.replace("^", "**")
# Prevent the runtime from being longer than 50 ms
- res = timeout_func(0.05, _eval_expr, query_py_formatted)
+ res = self.timeout_func(0.05, _eval_expr, query_py_formatted)
if res is None or res[0] == "":
return results
@@ -200,21 +216,3 @@ def handler(q: multiprocessing.Queue, func, args, **kwargs): # pylint:disable=i
except:
q.put(None)
raise
-
-
-def timeout_func(timeout, func, *args, **kwargs):
-
- que = mp_fork.Queue()
- p = mp_fork.Process(target=handler, args=(que, func, args), kwargs=kwargs)
- p.start()
- p.join(timeout=timeout)
- ret_val = None
- # pylint: disable=used-before-assignment,undefined-variable
- if not p.is_alive():
- ret_val = que.get()
- else:
- logger.debug("terminate function after timeout is exceeded") # type: ignore
- p.terminate()
- p.join()
- p.close()
- return ret_val