Description
Replace the current ThreadPoolExecutor approach with asyncio + httpx for non-blocking concurrent fetching.
Acceptance criteria
Notes
Medium-to-high effort. yfinance is synchronous internally, so we would need to either use asyncio.to_thread() or switch to direct API calls via httpx. Worth evaluating if yfinance rate limits are a bottleneck.
Description
Replace the current
ThreadPoolExecutorapproach withasyncio+httpxfor non-blocking concurrent fetching.Acceptance criteria
recommend()usesasynciointernally or exposes an async API alongside synchttpxoraiohttp)Notes
Medium-to-high effort. yfinance is synchronous internally, so we would need to either use
asyncio.to_thread()or switch to direct API calls via httpx. Worth evaluating if yfinance rate limits are a bottleneck.