joel commited on
Commit
b009395
·
1 Parent(s): 1d03e6e

maj main scrapeffef

Browse files
Files changed (1) hide show
  1. scraper/main.py +12 -8
scraper/main.py CHANGED
@@ -120,15 +120,24 @@ class ScrapDjiScraper:
120
  if not self.buffer: return
121
  logger.info(f"💾 Flush buffer: sauvegarde de {len(self.buffer)} documents...")
122
 
123
- # Exécuter la sauvegarde lourde dans un thread pour ne pas bloquer
124
  loop = asyncio.get_event_loop()
125
  await loop.run_in_executor(None, self._save_buffer_sync, self.buffer.copy())
126
 
 
 
 
 
 
 
 
 
 
 
127
  self.buffer = []
128
 
129
  def _save_buffer_sync(self, documents: List[Dict]):
130
- """Sauvegarde synchrone (disque/DB)"""
131
- # 1. Sauvegarde JSON Local (Critique)
132
  try:
133
  os.makedirs("data", exist_ok=True)
134
  local_file = "data/search_index.json"
@@ -148,11 +157,6 @@ class ScrapDjiScraper:
148
  except Exception as e:
149
  logger.error(f"Erreur sauvegarde JSON: {e}")
150
 
151
- # 2. Sauvegarde DB (Best effort)
152
- # Note: Pour MongoDB et autres clients async, il faudrait rester dans l'async
153
- # Mais ici on simplifie pour le file system qui est le bottleneck principal
154
- pass
155
-
156
  async def process_source(self, client: httpx.AsyncClient, source: Dict):
157
  """Traite une source avec découverte de liens"""
158
  count = 0
 
120
  if not self.buffer: return
121
  logger.info(f"💾 Flush buffer: sauvegarde de {len(self.buffer)} documents...")
122
 
123
+ # 1. Sauvegarde JSON (Bloquant -> Thread)
124
  loop = asyncio.get_event_loop()
125
  await loop.run_in_executor(None, self._save_buffer_sync, self.buffer.copy())
126
 
127
+ # 2. Sauvegarde MongoDB (Async -> Direct)
128
+ # On lance les sauvegardes en parallèle sans bloquer
129
+ try:
130
+ mongo_tasks = [save_to_mongo("documents", doc) for doc in self.buffer]
131
+ # On utilise gather avec return_exceptions=True pour que si un échoue, les autres continuent
132
+ await asyncio.gather(*mongo_tasks, return_exceptions=True)
133
+ logger.info("✅ Sauvegarde MongoDB terminées")
134
+ except Exception as e:
135
+ logger.error(f"Erreur sauvegarde MongoDB: {e}")
136
+
137
  self.buffer = []
138
 
139
  def _save_buffer_sync(self, documents: List[Dict]):
140
+ """Sauvegarde synchrone (disque uniquement)"""
 
141
  try:
142
  os.makedirs("data", exist_ok=True)
143
  local_file = "data/search_index.json"
 
157
  except Exception as e:
158
  logger.error(f"Erreur sauvegarde JSON: {e}")
159
 
 
 
 
 
 
160
  async def process_source(self, client: httpx.AsyncClient, source: Dict):
161
  """Traite une source avec découverte de liens"""
162
  count = 0