Теперь у меня есть этот код:
def parse_url(i):
url = f"https://www.python.org/dev/peps/pep-{i}/"
print(f"Started {str(i)}")
r = requests.get(url)
print(f"Ended {str(i)}")
return r.content
async def get_urls(executor):
loop = asyncio.get_event_loop()
tasks = [
loop.run_in_executor(executor, parse_url, i)
for i in range(8001, 8033)
]
await asyncio.wait(tasks)
if __name__ == '__main__':
loop = asyncio.get_event_loop()
executor = ThreadPoolExecutor(max_workers=2)
s = time.perf_counter()
loop.run_until_complete(
get_urls(executor)
)
loop.close()
Теперь работа разбита на 2 потока, но каждый поток выполняет запрос последовательно, я хочу стандартное асинхронное поведение в каждом потоке с aiohttp:
- Запустить запрос
- В ожидании данных откройте другой запрос
- Получить результат запроса
loop.run_in_executor не позволяет передавать сопрограммы в качестве параметра, как я могу достичь своего желания?