BASE_URL = "https://query2.finance.yahoo.com/"
DATA_URL_PART = "v8/finance/chart/{ticker}"
async def fetch_close_price(aiosession: aiohttp.ClientSession,
ticker: str, start: datetime, end: datetime, ticker_price_dict):
params = {
'period1': int(to_midnight(start, naive=False).timestamp()),
'period2': int(to_midnight(end, naive=False).timestamp()),
'interval': '1d',
'includeAdjustedClose': 'false' # Explicitly exclude adjusted close prices
}
print(f'Checking cache for ticker {ticker}')
if ticker in ticker_price_dict:
print(f'Found cache for ticker {ticker}')
return ticker_price_dict[ticker]
async with aiosession.get(DATA_URL_PART.format(ticker=ticker), params=params) as response:
if response.status == 200:
print(f"Downloading {ticker}", response.status)
data = await response.json()
....
....
df = pd.DataFrame({ticker: close_prices},
index=dates)
ticker_price_dict[ticker] = df
print(f"Downloaded and setting {ticker}", response.status)
return df
else:
print(f"Failed to fetch data for {ticker}", response.status)
return pd.DataFrame()
async def download_close_prices(aiosession: aiohttp.ClientSession,
tickers: list[str], start: datetime, end: datetime):
all_ticker_close = pd.DataFrame()
ticker_price_dict = {}
tasks = [fetch_close_price(aiosession, ticker, start, end, ticker_price_dict) for ticker in tickers]
results = await asyncio.gather(*tasks)
async def download_close_prices_all(tickers, start, end):
connector = aiohttp.TCPConnector(limit=50)
async with aiohttp.ClientSession(BASE_URL, connector=connector) as aiosession:
return await download_close_prices(aiosession, tickers, start, end)
if __name__ == "__main__":
tickers = ["AAPL", "USDINR=X", "XCN18679-USD", "XCN18679-USD", "XCN18679-USD"]
close_prices = asyncio.run(download_close_prices_all(tickers, start, end))
< /code>
Ich habe diese Asyncio-Funktion, die AIOHTTP verwendet, um Anfragen zu stellen und Datenrahmen zurückzugeben. Manchmal habe ich viele wiederholte Ticker, um wie das Beispiel zu holen, wie ich "xcn18679-usd" nenne. /Code> Viele Male habe ich versucht, einen einfachen Dict zu übergeben, um die Ergebnisse zu liegern Download fehlgeschlagen und ich möchte das nicht zwischenspeichern. Kann mir jemand in die richtige Richtung zeigen, was ich möglicherweise falsch mache? Vielen Dank an alle im Voraus.
Wenn Sie ein Diktat zum zwischengespeicherten Async -Funktionsergebnis verwenden, werden keine zwischengespeicherten Erg ⇐ Python
-
- Similar Topics
- Replies
- Views
- Last post