как сделать переподключение в случае потери соединения? Aiohttp

У меня есть такой код:

async def find_product_by_id(number_of_requests):
    global amount_r
    async with aiohttp.ClientSession() as session:
        tasks = [] #собирает все запросы тут
        for i in range(number_of_requests):
            print(amount_r)
            amount_r = amount_r + 1
            tasks.append(asyncio.create_task(session.get(url = f'https://api.kazanexpress.ru/api/v2/product/{amount_r}'))) # Добавления новой задачи
        responses = await asyncio.gather(*tasks) # Асиннхронная активация всех собранных задач
        yield [await r.text(encoding='UTF-8') for r in responses] # возвращяет один ответ за раз
            

Вот что я получаю на 5 тысячный запрос

Traceback (most recent call last):
  File "c:\проекты\kazanexpress_parser\main.py", line 154, in <module>
    loop.run_until_complete(main())
  File "C:\Users\batu\AppData\Local\Programs\Python\Python39\lib\asyncio\base_events.py", line 642, in run_until_complete
    return future.result()
  File "c:\проекты\kazanexpress_parser\main.py", line 129, in main
    async for i in find_product_by_id(N):
  File "c:\проекты\kazanexpress_parser\main.py", line 29, in find_product_by_id
    responses = await asyncio.gather(*tasks) # Асиннхронная активация всех собранных задач
  File "C:\Users\batu\AppData\Local\Programs\Python\Python39\lib\site-packages\aiohttp\client.py", line 1125, in throw
    self._coro.throw(arg)
  File "C:\Users\batu\AppData\Local\Programs\Python\Python39\lib\site-packages\aiohttp\client.py", line 559, in _request
    await resp.start(conn)
  File "C:\Users\batu\AppData\Local\Programs\Python\Python39\lib\site-packages\aiohttp\client_reqrep.py", line 898, in start
    message, payload = await protocol.read()  # type: ignore[union-attr]
  File "C:\Users\batu\AppData\Local\Programs\Python\Python39\lib\site-packages\aiohttp\streams.py", line 616, in read
    await self._waiter
aiohttp.client_exceptions.ServerDisconnectedError: Server disconnected

существует ли способ востоновить соединение и продолжить функцию с того же момента где она получила ошибку?

на всякий случай вот мой main:

async def main():
    # последовательная активация функций
   
    asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy())
    N  = 1000 # Количество запросов подряд 
    #p = Process(target=find_product_by_id_2_proc)
    #p.start()
    itr = 10 # Количество итераций
    parse_thread = threading.Thread(target= parse_product)
    parse_thread.start()
    start_timestamp = time.time()
    for i in range(itr): # количество итераций, Одна итерация == N запросов
        async for i in find_product_by_id(N):
            row_data.append(i)
        print('Количество продуктов: ',len(data))
        time.sleep(5)
        print('sleep time')
    task_time = round(time.time() - start_timestamp, 2)
    rps = round(N / task_time, 1)
    print(
        f"| Requests: {N *itr}; Total time: {task_time} s; RPS: {rps}. |\n"
    )
    with open('file','w',encoding='UTF-8') as f:
        for i in data:
            f.write(str(i))
            f.write('                                           ')


if __name__ == '__main__':
    asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy())
    loop = asyncio.get_event_loop()
    loop.run_until_complete(main())
    loop.close()
            

Ответы (0 шт):