This was my first initial code and it is successful in requesting for multiple Ethereum addresses balance.
import requests
import time
import pandas as pd
start = time.time()
df = pd.read_csv('ethereumaddresses.csv')
Wallet_Address=(df.loc[:,'Address'])
results = []
start = time.time()
for address in Wallet_Address:
url = f"https://blockscout.com/eth/mainnet/api?module=account&action=eth_get_balance&address={address}"
response = requests.get(url)
results = response.json()
print(results)
end = time.time()
total_time = end - start
print(f"It took {total_time} to make {len(Wallet_Address)} API calls")
However, I am requesting for 1000 Ethereum Addresses and I wanted to improve my code with the async function. This was my attempt. What am I doing wrong?
import asyncio
import aiohttp
import time
import pandas as pd
start = time.time()
df = pd.read_csv('Ethereum/ethereumaddresses.csv')
Wallet_Address=(df.loc[:,'Address'])
results = []
def get_tasks(session):
tasks = []
for address in Wallet_Address:
url = f"https://blockscout.com/eth/mainnet/api?module=account&action=eth_get_balance&address={address}"
tasks.append(session.get(url,ssl=False))
print(address)
return tasks
session_timeout = aiohttp.ClientTimeout(total=None)
async def get_balances():
async with aiohttp.ClientSession(timeout=session_timeout) as session:
tasks = get_tasks(session)
responses = await asyncio.gather(*tasks)
for response in responses:
results.append(await response.json())
asyncio.run(get_balances())
end = time.time()
total_time = end - start
print(f"It took {total_time} seconds to make {len(Wallet_Address)} API calls")
It gives me an error:
RuntimeError: await wasn't used with future
_OverlappedFuture exception was never retrieved
future: <_OverlappedFuture finished exception=OSError(22, 'The I/O operation has been aborted because of either a thread exit or an application request', None, 995, None)>
Traceback (most recent call last):
File "AppData\Local\Programs\Python\Python310\lib\asyncio\windows_events.py", line 817, in _poll
value = callback(transferred, key, ov)
File "AppData\Local\Programs\Python\Python310\lib\asyncio\windows_events.py", line 604, in finish_connect
ov.getresult()
OSError: [WinError 995] The I/O operation has been aborted because of either a thread exit or an application request