Sehr einfach möchte ich einfach Antworten von aiohttp
asynchronen HTTP-Anfragen mit einem Bezeichner, z. B. einem Diktatschlüssel, zuordnen, so dass ich weiß, welche Antwort welcher Anfrage entspricht.Associate aiohttp Anfragen mit ihren Antworten
Zum Beispiel ruft die folgende Funktion URIs auf, denen die dict-Werte 1
, 2
und 3
vorangestellt sind. Wie kann es geändert werden, um die mit jedem Ergebnis verknüpften Schlüssel zurückzugeben? Ich muß nur in der Lage sein, den Überblick behalten, welche Anforderung ist die ... Ohne Zweifel trivial für jemanden vertraut mit 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)
Ausgang (abgekürzt):
[{'id': 2, ...}, {'id': 3, ...}, {'id': 1...}]
gewünschte Ausgabe (zum Beispiel):
{'b': {'id': 2, ...}, 'c': {'id': 3, ...}, 'a': {'id': 1, ...}}
Danke, das ist genau das, was ich suchte. Ich bemerke, dass Sie die 'ClientSession()' innerhalb von 'main()' öffnen anstatt die 'fetch()' - ist das nur eine Frage der Präferenz? –
@bedeabc eine bessere Frage, warum brauchen Sie mehrere Sitzungen hier? – jfs
@ j-f-sebastian Danke, ich verstehe deinen Standpunkt. Ich war Muster aus dem folgenden Artikel mit: http://pawelmhm.github.io/asyncio/python/aiohttp/2016/04/22/asyncio-aiohttp.html –