将 aiohttp 请求与其响应相关联
Associating aiohttp requests with their responses
非常简单,我只想将来自 aiohttp
异步 HTTP 请求的响应与标识符(例如词典键)相关联,以便我知道哪个响应对应于哪个请求。
例如,下面的函数调用后缀为字典值 1
、2
和 3
的 URI。如何将其修改为 return 与每个结果关联的键?我只需要能够跟踪哪个请求是哪个……对于熟悉 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)
输出(缩写):
[{'id': 2, ...}, {'id': 3, ...}, {'id': 1...}]
期望的输出(例如):
{'b': {'id': 2, ...}, 'c': {'id': 3, ...}, 'a': {'id': 1, ...}}
将密钥传递给 fetch()
,然后传递给 return 他们并给出相应的响应:
#!/usr/bin/env python
import asyncio
import aiohttp # $ pip install aiohttp
async def fetch(session, key, item, base_url='http://example.com/posts/'):
async with session.get(base_url + item) as response:
return key, await response.json()
async def main():
d = {'a': '1', 'b': '2', 'c': '3'}
with aiohttp.ClientSession() as session:
####tasks = map(functools.partial(fetch, session), *zip(*d.items()))
tasks = [fetch(session, *item) for item in d.items()]
responses = await asyncio.gather(*tasks)
print(dict(responses))
asyncio.get_event_loop().run_until_complete(main())
非常简单,我只想将来自 aiohttp
异步 HTTP 请求的响应与标识符(例如词典键)相关联,以便我知道哪个响应对应于哪个请求。
例如,下面的函数调用后缀为字典值 1
、2
和 3
的 URI。如何将其修改为 return 与每个结果关联的键?我只需要能够跟踪哪个请求是哪个……对于熟悉 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)
输出(缩写):
[{'id': 2, ...}, {'id': 3, ...}, {'id': 1...}]
期望的输出(例如):
{'b': {'id': 2, ...}, 'c': {'id': 3, ...}, 'a': {'id': 1, ...}}
将密钥传递给 fetch()
,然后传递给 return 他们并给出相应的响应:
#!/usr/bin/env python
import asyncio
import aiohttp # $ pip install aiohttp
async def fetch(session, key, item, base_url='http://example.com/posts/'):
async with session.get(base_url + item) as response:
return key, await response.json()
async def main():
d = {'a': '1', 'b': '2', 'c': '3'}
with aiohttp.ClientSession() as session:
####tasks = map(functools.partial(fetch, session), *zip(*d.items()))
tasks = [fetch(session, *item) for item in d.items()]
responses = await asyncio.gather(*tasks)
print(dict(responses))
asyncio.get_event_loop().run_until_complete(main())