Форум сайта python.su
0
Всем привет!
Я новичек в Python.
Только сегодня читаю про aiohttp, и пока еще слабо отстреливаю как оно работает.
Вообщем, моя задача сделать много асинхронных запросов используя прокси.
У меня возникло 2 вопроса:
1. Как правильно подавать прокси для запросов? Я знаю что next(proxy) это полная дичь, но кроме этого мне на ум приходит юзать только Queue, типа перед запросо queue.get(), а после запроса обратно ложить прокси обратно в очередь queue.put(). Нормально ли юзать queue здесь?
2. Поскольку прокси подразумеваю юзать паблик, там половина нерабочих или с редиректамии. Как отловить таймауты и неправильные запросы, я могу себе представить.
Но как пустить обратно в задание зафейлившийся запрос с новым прокси?
Пример кода:
import asyncio import aiohttp ids = ['1', '2', '3'] proxylist = ['http://xx.xx.x.xx:xxxx', 'http://xx.xx.x.xx:xxxx', 'http://xx.xx.x.xx:xxxx'] proxy = iter(proxylist) async def fetch(session, id): print('Starting {}'.format(id)) url = f'https://www.testing.com/{id}' async with session.get(url, proxy=next(proxy)) as response: return await response.content async def main(id): async with aiohttp.ClientSession() as session: result = await fetch(session, id) print(id, result) loop = asyncio.get_event_loop() future = [asyncio.ensure_future(main(id)) for id in ids] loop.run_until_complete(asyncio.wait(future))
Отредактировано stratum (Апрель 30, 2019 23:25:13)
Офлайн
253
Да уж. Конструкция с next странная. Я бы на каждый запрос делал сессию. main тогда не нужен. Вместо enshure/wait будет gather
stratumМне задача не очень понятна. Вам данные нужны или вы прокси тестируете?
Но как пустить обратно в задание зафейлившийся запрос с новым прокси?
Офлайн
0
doza_andСпасибо за ответ, буду дальше разбираться, пока еще не встречал gather. Мне даже в русские статьи о asyncio сложно вьехать, не то что в оф. документацию.
Да уж. Конструкция с next странная. Я бы на каждый запрос делал сессию. main тогда не нужен. Вместо enshure/wait будет gather
Офлайн