opex792 commited on
Commit
20d1dcf
·
verified ·
1 Parent(s): 53e6d17

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +19 -7
app.py CHANGED
@@ -47,6 +47,8 @@ for movie in movies_data:
47
 
48
  # Флаг, указывающий, что обработка фильмов завершена
49
  processing_complete = False
 
 
50
 
51
  # Блокировка для доступа к movie_embeddings
52
  movie_embeddings_lock = threading.Lock()
@@ -61,14 +63,22 @@ def process_movies():
61
  """
62
  global processing_complete
63
  while True:
 
 
 
 
64
  try:
65
- movie = movies_queue.get(timeout=1) # Тайм-аут 1 секунда
66
  except queue.Empty:
67
  print("Очередь фильмов пуста.")
68
  processing_complete = True
69
  break
70
 
71
  title = movie["name"]
 
 
 
 
72
  print(f"Создается эмбеддинг для фильма '{title}'...")
73
  embedding_string = f"Название: {movie['name']}\nГод: {movie['year']}\nЖанры: {movie['genresList']}\nОписание: {movie['description']}"
74
  embedding = encode_string(embedding_string).tolist()
@@ -111,35 +121,37 @@ def search_movies(query, top_k=3):
111
  Returns:
112
  Строку с результатами поиска в формате HTML.
113
  """
 
 
114
  start_time = time.time()
115
  print(f"\n\033[1mПоиск по запросу: '{query}'\033[0m")
116
 
 
117
  query_embedding_tensor = encode_string(query)
 
118
 
119
  with movie_embeddings_lock:
120
- # Делаем копию словаря, чтобы избежать ошибок при изменении оригинала во время итерации
121
  current_movie_embeddings = movie_embeddings.copy()
122
 
123
  if not current_movie_embeddings:
 
124
  return "<p>Пока что нет обработанных фильмов. Попробуйте позже.</p>"
125
 
126
- # Создаем словарь с описаниями фильмов
127
  movie_descriptions = {}
128
  for movie in movies_data:
129
  movie_descriptions[movie["name"]] = f"Название: {movie['name']}\nГод: {movie['year']}\nЖанры: {movie['genresList']}\nОписание: {movie['description']}"
130
 
131
- # Вычисляем косинусное сходство и сохраняем в список кортежей (название фильма, сходство)
132
  similarity_scores = []
133
  for title, embedding in current_movie_embeddings.items():
134
  similarity = util.pytorch_cos_sim(query_embedding_tensor, encode_string(movie_descriptions[title]))[0][0].item()
135
  similarity_scores.append((title, similarity))
 
136
 
137
- # Сортируем фильмы по убыванию сходства
138
  sorted_movies = sorted(similarity_scores, key=lambda item: item[1], reverse=True)
139
 
140
  results_html = ""
141
  for title, score in sorted_movies[:top_k]:
142
- # Ищем полное описание фильма в исходных данных
143
  for movie in movies_data:
144
  if movie["name"] == title:
145
  description = movie["description"]
@@ -156,7 +168,7 @@ def search_movies(query, top_k=3):
156
  end_time = time.time()
157
  execution_time = end_time - start_time
158
  print(f"Поиск завершен за {execution_time:.4f} секунд.")
159
-
160
  return results_html
161
 
162
  # Поток для обработки фильмов
 
47
 
48
  # Флаг, указывающий, что обработка фильмов завершена
49
  processing_complete = False
50
+ # Флаг, указывающий, что выполняется поиск
51
+ search_in_progress = False
52
 
53
  # Блокировка для доступа к movie_embeddings
54
  movie_embeddings_lock = threading.Lock()
 
63
  """
64
  global processing_complete
65
  while True:
66
+ if search_in_progress:
67
+ time.sleep(1) # Ждем, пока поиск не завершится
68
+ continue
69
+
70
  try:
71
+ movie = movies_queue.get(timeout=1)
72
  except queue.Empty:
73
  print("Очередь фильмов пуста.")
74
  processing_complete = True
75
  break
76
 
77
  title = movie["name"]
78
+ if title in movie_embeddings:
79
+ print(f"Эмбеддинг для фильма '{title}' уже существует. Пропускаем.")
80
+ continue
81
+
82
  print(f"Создается эмбеддинг для фильма '{title}'...")
83
  embedding_string = f"Название: {movie['name']}\nГод: {movie['year']}\nЖанры: {movie['genresList']}\nОписание: {movie['description']}"
84
  embedding = encode_string(embedding_string).tolist()
 
121
  Returns:
122
  Строку с результатами поиска в формате HTML.
123
  """
124
+ global search_in_progress
125
+ search_in_progress = True
126
  start_time = time.time()
127
  print(f"\n\033[1mПоиск по запросу: '{query}'\033[0m")
128
 
129
+ print(f"Начало создания эмбеддинга для запроса: {time.strftime('%Y-%m-%d %H:%M:%S')}")
130
  query_embedding_tensor = encode_string(query)
131
+ print(f"Окончание создания эмбеддинга для запроса: {time.strftime('%Y-%m-%d %H:%M:%S')}")
132
 
133
  with movie_embeddings_lock:
 
134
  current_movie_embeddings = movie_embeddings.copy()
135
 
136
  if not current_movie_embeddings:
137
+ search_in_progress = False
138
  return "<p>Пока что нет обработанных фильмов. Попробуйте позже.</p>"
139
 
 
140
  movie_descriptions = {}
141
  for movie in movies_data:
142
  movie_descriptions[movie["name"]] = f"Название: {movie['name']}\nГод: {movie['year']}\nЖанры: {movie['genresList']}\nОписание: {movie['description']}"
143
 
144
+ print(f"Начало вычисления косинусного сходства: {time.strftime('%Y-%m-%d %H:%M:%S')}")
145
  similarity_scores = []
146
  for title, embedding in current_movie_embeddings.items():
147
  similarity = util.pytorch_cos_sim(query_embedding_tensor, encode_string(movie_descriptions[title]))[0][0].item()
148
  similarity_scores.append((title, similarity))
149
+ print(f"Окончание вычисления косинусного сходства: {time.strftime('%Y-%m-%d %H:%M:%S')}")
150
 
 
151
  sorted_movies = sorted(similarity_scores, key=lambda item: item[1], reverse=True)
152
 
153
  results_html = ""
154
  for title, score in sorted_movies[:top_k]:
 
155
  for movie in movies_data:
156
  if movie["name"] == title:
157
  description = movie["description"]
 
168
  end_time = time.time()
169
  execution_time = end_time - start_time
170
  print(f"Поиск завершен за {execution_time:.4f} секунд.")
171
+ search_in_progress = False
172
  return results_html
173
 
174
  # Поток для обработки фильмов