готовил уже следующее задание? А то получается, что в данном случаи генерируется 500 запросов, они отправляются, ждем ответа, и уже потом опять генерируются запросы. Да, еще и это записываем. 
                  
                  
                   
                  
                  
                  async def get_pokemon(session, url): 
                  
                  
                      async with session.get(url) as resp: 
                  
                  
                          if resp.status == 200: 
                  
                  
                              pokemon = await resp.json(content_type=None) 
                  
                  
                              return pokemon['name'] 
                  
                  
                          else: 
                  
                  
                              pokemon = 'no name or resp error' 
                  
                  
                              return pokemon 
                  
                  
                   
                  
                  
                  async def main(): 
                  
                  
                      async with aiohttp.ClientSession() as session: 
                  
                  
                          while True: 
                  
                  
                              tasks = [] 
                  
                  
                              for i in range(500): 
                  
                  
                                  r = random.randint(1,500) 
                  
                  
                                  url = f'https://pokeapi.co/api/v2/pokemon/{r}' 
                  
                  
                                  tasks.append(asyncio.ensure_future(get_pokemon(session, url)))            
                  
                  
                              original_pokemon = await asyncio.gather(*tasks) 
                  
                  
                              for pokemon in original_pokemon: 
                  
                  
                                  with open("pokemons.txt", "a") as f: 
                  
                  
                                      f.write(pokemon + '\n')
                  
                  
                
Использовать не gather, а create_task. gather не дает потоку пройти дальше, пока все таски не выполнятся
Илья, не получилось исправить код используя create_task, как посоветовали. Не хватило мозгов. На могли бы помочь внести исправления если много не нужно переделывать.
Покажи как ты используешьл
Перебирал много вариантов вчера, уже был не у компа. Последний код, что написал, ниже. Скорость нулевая. Толи await не там толи вообще не правильный подход. Хотел сделать лучше, чтобы программа не спала вообще, увеличив скорость, а получилось хуже.. ладно тут randint быстро работает, а если вместо него будет что-то по медленнее, тогда вообще пол века выполняться будет. Помогите) async def get_api(client, url): async with client.get(url) as response: return await response.json() async def pok(): async with aiohttp.ClientSession() as session: for i in range(15): r = random.randint(1,500) url = f'https://pokeapi.co/api/v2/pokemon/{r}' task = asyncio.create_task(get_api(session, url)) poky = await task print(poky['name']) loop = asyncio.get_event_loop() loop.run_until_complete(pok())
Код текстом меняет формат в чате хз почему
Ты авейтишь таску в той же итерации цикла. Не замечаешь проблемы?
На monospace лучше переводить, все отступы сохраняются
Всегда так делал, в этот раз после отправки сообщения убирает форматирование, вот и проблема
Не надо сразу после создания таски ее авейтить, она начинает выполняться и без этого
Вот не врубаюсь пока
из редакторов, в моём случае pycharm, скопированный код уже вставляется в телегу в monospace
Обсуждают сегодня