Очень просто, я просто хотел бы связать ответы от aiohttp
асинхронных HTTP-запросов с идентификатором, таких как ключ-запрос, чтобы я знал, какой ответ соответствует запросу.Связывание запросов aiohttp с их ответами
Например, нижеприведенная функция вызывает URI с суффиксными значениями 1
, 2
и 3
. Как его можно изменить, чтобы вернуть ключи, связанные с каждым результатом? Мне просто нужно, чтобы иметь возможность отслеживать, какой запрос, который ... Несомненным тривиальна для кого-то знакомого с asyncio
import asyncio
import aiohttp
items = {'a': '1', 'b': '2', 'c': '3'}
def async_requests(items):
async def fetch(item):
url = 'http://jsonplaceholder.typicode.com/posts/'
async with aiohttp.ClientSession() as session:
async with session.get(url + item) as response:
return await response.json()
async def run(loop):
tasks = []
for k, v in items.items():
task = asyncio.ensure_future(fetch(v))
tasks.append(task)
responses = await asyncio.gather(*tasks)
print(responses)
loop = asyncio.get_event_loop()
future = asyncio.ensure_future(run(loop))
loop.run_until_complete(future)
async_requests(items)
Output (сокращенном):
[{'id': 2, ...}, {'id': 3, ...}, {'id': 1...}]
Желаемая вывода (например):
{'b': {'id': 2, ...}, 'c': {'id': 3, ...}, 'a': {'id': 1, ...}}
Спасибо, это именно то, что я был после. Я замечаю, что вы открываете 'ClientSession()' inside 'main()', а не 'fetch()' - это просто вопрос предпочтения? –
@bedeabc лучший вопрос, почему вам нужно несколько сеансов здесь? – jfs
@ j-f-sebastian Спасибо, я вижу вашу мысль. Я использовал шаблоны из следующей статьи: http://pawelmhm.github.io/asyncio/python/aiohttp/2016/04/22/asyncio-aiohttp.html –