Spaces:
Sleeping
Sleeping
joel commited on
Commit ·
b009395
1
Parent(s): 1d03e6e
maj main scrapeffef
Browse files- 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 |
-
#
|
| 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
|
| 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
|