summaryrefslogtreecommitdiff
path: root/services
diff options
context:
space:
mode:
authorTheSiahxyz <164138827+TheSiahxyz@users.noreply.github.com>2026-04-02 16:07:20 +0900
committerTheSiahxyz <164138827+TheSiahxyz@users.noreply.github.com>2026-04-02 16:07:20 +0900
commit86a0fa84ca6662ca931182880523c0b87f617f73 (patch)
treef483d39698849a6d4cdbd4c79979217f05be78be /services
parent4747400168279c6cfc1196d86ec77b5d7b513c61 (diff)
fix: add session lock in StockSelector, remove unused HEALTH_PORT_OFFSET, lint fixesHEADmaster
- Add asyncio.Lock to StockSelector._ensure_session() to prevent race condition - Remove unused HEALTH_PORT_OFFSET constant from news-collector - Auto-fix import sorting and formatting from ruff
Diffstat (limited to 'services')
-rw-r--r--services/news-collector/src/news_collector/main.py3
-rw-r--r--services/strategy-engine/src/strategy_engine/stock_selector.py9
2 files changed, 6 insertions, 6 deletions
diff --git a/services/news-collector/src/news_collector/main.py b/services/news-collector/src/news_collector/main.py
index 7265f00..c39fa67 100644
--- a/services/news-collector/src/news_collector/main.py
+++ b/services/news-collector/src/news_collector/main.py
@@ -25,9 +25,6 @@ from shared.sentiment import SentimentAggregator
from shared.sentiment_models import MarketSentiment
from shared.shutdown import GracefulShutdown
-# Health check port: base + 4
-HEALTH_PORT_OFFSET = 4
-
async def run_collector_once(collector, db: Database, broker: RedisBroker) -> int:
"""Run a single collector, store results in DB, publish to Redis.
diff --git a/services/strategy-engine/src/strategy_engine/stock_selector.py b/services/strategy-engine/src/strategy_engine/stock_selector.py
index 5acef0f..8657b93 100644
--- a/services/strategy-engine/src/strategy_engine/stock_selector.py
+++ b/services/strategy-engine/src/strategy_engine/stock_selector.py
@@ -1,5 +1,6 @@
"""3-stage stock selector engine: sentiment → technical → LLM."""
+import asyncio
import json
import logging
import re
@@ -218,11 +219,13 @@ class StockSelector:
self._model = anthropic_model
self._max_picks = max_picks
self._http_session: aiohttp.ClientSession | None = None
+ self._session_lock = asyncio.Lock()
async def _ensure_session(self) -> aiohttp.ClientSession:
- if self._http_session is None or self._http_session.closed:
- self._http_session = aiohttp.ClientSession()
- return self._http_session
+ async with self._session_lock:
+ if self._http_session is None or self._http_session.closed:
+ self._http_session = aiohttp.ClientSession()
+ return self._http_session
async def close(self) -> None:
if self._http_session and not self._http_session.closed: