Asyncio 可订阅问题
Asyncio subscriptable problems
我正在尝试使用 asyncio
库向某些 url 发出请求调用,但我正在检索错误 TypeError: 'coroutine' object is not subscriptable
provider = []
def get_tasks(session):
tasks = []
for number in list(american['mobile_number'].values):
url = 'https://api.telnyx.com/v1/phone_number/1' + number
loop = asyncio.get_event_loop()
tasks.append(loop.create_task(session.get(url, ssl=False)))
return tasks
async def get_carrier():
async with aiohttp.ClientSession() as session:
tasks = get_tasks(session)
responses = await asyncio.gather(*tasks)
for response in responses:
provider.append(await response.json()['carrier']['name'])
asyncio.get_event_loop().run_until_complete(get_carrier())
错误:
TypeError: 'coroutine' object is not subscriptable
所以作为一个例子,我会避免使用两个异步循环,而只是做类似的事情。
import asyncio
import aiohttp
import aiohttp.client_exceptions
async def get_carrier():
async with aiohttp.ClientSession() as session:
for number in ['6613686502', '5166100971', '4436029240', '5707018841', '7049668597']:
url = 'https://api.telnyx.com/v1/phone_number/1' + number
async with session.get(url, ssl=False) as response:
try:
resp_json = await response.json()
print(f"{number}, {resp_json['carrier']['name']}")
except aiohttp.client_exceptions.ContentTypeError as e:
print(f"{number}, Unable to find data")
asyncio.get_event_loop().run_until_complete(get_carrier())
输出
我不确定 api 是否有限制并且轮询速度太快,因为我得到的结果不一致。
6613686502, ONVOY, LLC - CA
5166100971, Unable to find data
4436029240, Unable to find data
5707018841, Unable to find data
7049668597, ONVOY, LLC - NC
我正在尝试使用 asyncio
库向某些 url 发出请求调用,但我正在检索错误 TypeError: 'coroutine' object is not subscriptable
provider = []
def get_tasks(session):
tasks = []
for number in list(american['mobile_number'].values):
url = 'https://api.telnyx.com/v1/phone_number/1' + number
loop = asyncio.get_event_loop()
tasks.append(loop.create_task(session.get(url, ssl=False)))
return tasks
async def get_carrier():
async with aiohttp.ClientSession() as session:
tasks = get_tasks(session)
responses = await asyncio.gather(*tasks)
for response in responses:
provider.append(await response.json()['carrier']['name'])
asyncio.get_event_loop().run_until_complete(get_carrier())
错误:
TypeError: 'coroutine' object is not subscriptable
所以作为一个例子,我会避免使用两个异步循环,而只是做类似的事情。
import asyncio
import aiohttp
import aiohttp.client_exceptions
async def get_carrier():
async with aiohttp.ClientSession() as session:
for number in ['6613686502', '5166100971', '4436029240', '5707018841', '7049668597']:
url = 'https://api.telnyx.com/v1/phone_number/1' + number
async with session.get(url, ssl=False) as response:
try:
resp_json = await response.json()
print(f"{number}, {resp_json['carrier']['name']}")
except aiohttp.client_exceptions.ContentTypeError as e:
print(f"{number}, Unable to find data")
asyncio.get_event_loop().run_until_complete(get_carrier())
输出 我不确定 api 是否有限制并且轮询速度太快,因为我得到的结果不一致。
6613686502, ONVOY, LLC - CA
5166100971, Unable to find data
4436029240, Unable to find data
5707018841, Unable to find data
7049668597, ONVOY, LLC - NC