У меня есть скрипт для запуска параллельных запросов к API внутри класса.Тем не менее, результаты, которые я получаю, - это в основном задача, а не реальные результатыЕсть причина почему?
Я имитировал измененный клиентский код на https://pawelmhm.github.io/asyncio/python/aiohttp/2016/04/22/asyncio-aiohttp.html.
import asyncio
from aiohttp import ClientSession
class Requestor:
async def _async_request(self, url, session, sema_sz=10):
sema = asyncio.Semaphore(sema_sz)
async with sema:
async with session.get(url) as response:
req = await response.json()
return req
async def _async_chunk_request(self, url, chunks, headers=None, sema_sz=10):
async with ClientSession(headers=headers) as session:
futures = [asyncio.ensure_future(self._async_request(url.format(chunk), session, sema_sz)) for chunk in chunks]
responses = asyncio.gather(*futures)
await responses
def get_request(self, url, chunks):
loop = asyncio.get_event_loop()
bulk_req = asyncio.ensure_future(self._async_chunk_request(url, chunks))
loop.run_until_complete(bulk_req)
return bulk_req
На самом деле, Bulg_req - это переменная Task, а не результаты, и показывает это в PyCharm, Task finished coro=<Requestor._async_chunk_request() done, defined at ...
Когда я отлаживаю, я вижу, что req
имеет полное и правильное значение ответа, так что с этим проблем нет.Я чувствую, что это как-то связано с фактическим сбором фьючерсов?