sergiev commited on
Commit
52ce6eb
·
verified ·
1 Parent(s): 3b9ef3b

Upload folder using huggingface_hub

Browse files
Files changed (2) hide show
  1. src/app_backend.py +3 -0
  2. src/app_gradio.py +40 -3
src/app_backend.py CHANGED
@@ -74,6 +74,7 @@ def footprint_corner_crd(
74
  k1 = -1
75
  k2 = 1
76
  # определение углов места и углов курса точки относительно РЛС1 и РЛС2 методом последовательных приближений
 
77
  while abs(dpsi_1upd - dpsi_1) > 0.01 or abs(dpsi_2upd - dpsi_2) > 0.01:
78
  dpsi_1 = dpsi_1upd
79
  dpsi_2 = dpsi_2upd
@@ -84,8 +85,10 @@ def footprint_corner_crd(
84
  if (
85
  abs(mt.sin(theta / 2) / mt.sin(phi_1)) > 1
86
  or abs(mt.sin(theta / 2) / mt.sin(phi_2)) > 1
 
87
  ):
88
  return "none"
 
89
  dpsi_1upd = k1 * mt.asin(mt.sin(theta / 2) / mt.sin(phi_1))
90
  dpsi_2upd = k2 * mt.asin(mt.sin(theta / 2) / mt.sin(phi_2))
91
  # итоговые значения углов места и углов курса точки относительно РЛС1 и РЛС2
 
74
  k1 = -1
75
  k2 = 1
76
  # определение углов места и углов курса точки относительно РЛС1 и РЛС2 методом последовательных приближений
77
+ j = 0
78
  while abs(dpsi_1upd - dpsi_1) > 0.01 or abs(dpsi_2upd - dpsi_2) > 0.01:
79
  dpsi_1 = dpsi_1upd
80
  dpsi_2 = dpsi_2upd
 
85
  if (
86
  abs(mt.sin(theta / 2) / mt.sin(phi_1)) > 1
87
  or abs(mt.sin(theta / 2) / mt.sin(phi_2)) > 1
88
+ or j > 1e3
89
  ):
90
  return "none"
91
+ j += 1
92
  dpsi_1upd = k1 * mt.asin(mt.sin(theta / 2) / mt.sin(phi_1))
93
  dpsi_2upd = k2 * mt.asin(mt.sin(theta / 2) / mt.sin(phi_2))
94
  # итоговые значения углов места и углов курса точки относительно РЛС1 и РЛС2
src/app_gradio.py CHANGED
@@ -1,6 +1,10 @@
 
 
1
  import gradio as gr
2
- import app_backend
3
 
 
 
 
4
  BG_CHOICES = ("Задать значение", "Выбрать из модели Кулемина")
5
  KULEMIN = {
6
  "лес летом": [-20, 10, 6],
@@ -45,9 +49,36 @@ LOGOS_HEADER = """
45
  """
46
 
47
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
48
  def main(i):
49
  try:
50
- out = app_backend.bistatic_radar_model(
51
  v=i[speed],
52
  h=i[height],
53
  uav_interval=i[uav_interval],
@@ -66,8 +97,14 @@ def main(i):
66
  peak_power=i[peak_power],
67
  polarization_tilt_angle=0 if i[polar_type] == "H" else 90,
68
  )
 
 
 
 
 
 
69
  return f"{out['dx']:.3f}", f"{out['dy']:.3f}", f"{out['snr']:.1f}"
70
- except:
71
  return ["ОШИБКА: недопустимая комбинация входных параметров"] * 3
72
 
73
 
 
1
+ from multiprocessing import Process, Queue
2
+
3
  import gradio as gr
 
4
 
5
+ from app_backend import bistatic_radar_model
6
+
7
+ TIMEOUT = 10 # если столько секунд нет ответа от функции - возвращаем пользователю сообщение об ошибке.
8
  BG_CHOICES = ("Задать значение", "Выбрать из модели Кулемина")
9
  KULEMIN = {
10
  "лес летом": [-20, 10, 6],
 
49
  """
50
 
51
 
52
+ def run_model_with_timeout(timeout, *args, **kwargs):
53
+ def target(q, *args, **kwargs):
54
+ try:
55
+ res = bistatic_radar_model(*args, **kwargs)
56
+ q.put(res)
57
+ except Exception as e:
58
+ q.put(e)
59
+
60
+ q = Queue()
61
+ p = Process(target=target, args=(q, *args), kwargs=kwargs)
62
+ p.start()
63
+ p.join(timeout)
64
+
65
+ if p.is_alive():
66
+ p.terminate()
67
+ p.join()
68
+ return None # Таймаут
69
+
70
+ if q.empty():
71
+ return None
72
+
73
+ result = q.get()
74
+ if isinstance(result, Exception):
75
+ raise result
76
+ return result
77
+
78
+
79
  def main(i):
80
  try:
81
+ kwargs = dict(
82
  v=i[speed],
83
  h=i[height],
84
  uav_interval=i[uav_interval],
 
97
  peak_power=i[peak_power],
98
  polarization_tilt_angle=0 if i[polar_type] == "H" else 90,
99
  )
100
+ # Запускаем с таймаутом 5 секунд
101
+ out = run_model_with_timeout(TIMEOUT, **kwargs)
102
+ if out is None:
103
+ # Таймаут — возвращаем значения по умолчанию или сообщение об ошибке
104
+ return ["Обновите страницу или исправьте параметры: время ожидания ответа от сервера истекло"] * 3
105
+
106
  return f"{out['dx']:.3f}", f"{out['dy']:.3f}", f"{out['snr']:.1f}"
107
+ except Exception:
108
  return ["ОШИБКА: недопустимая комбинация входных параметров"] * 3
109
 
110