готовил уже следующее задание? А то получается, что в данном случаи генерируется 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
Обсуждают сегодня