поэтому мой код выглядит так:
tasks = [asyncio.ensure_future(self.run(proxy)) for proxy in proxy_list]
loop = asyncio.get_event_loop()
loop.run_until_complete(asyncio.wait(tasks))
res = [task.result() for task in tasks if task.result()]
async def run(self, proxy):
async with aiohttp.ClientSession() as session:
try:
async with session.get(url='https://www.google.com', proxy=proxy,
headers=self.get_headers(), timeout=5) as resp:
return proxy
except Exception as e:
return None
Иногда выдает ошибку SL:
SL error in data received
protocol: <asyncio.sslproto.SSLProtocol object at 0x04CBEFB0>
transport: <_SelectorSocketTransport fd=2020 read=polling write=<idle, bufsize=0>>
Traceback (most recent call last):
File "C:\Program Files (x86)\Python\lib\asyncio\sslproto.py", line 526, in data_received
ssldata, appdata = self._sslpipe.feed_ssldata(data)
File "C:\Program Files (x86)\Python\lib\asyncio\sslproto.py", line 207, in feed_ssldata
self._sslobj.unwrap()
File "C:\Program Files (x86)\Python\lib\ssl.py", line 767, in unwrap
return self._sslobj.shutdown()
ssl.SSLError: [SSL: DECRYPTION_FAILED_OR_BAD_RECORD_MAC] decryption failed or bad record mac (_ssl.c:2592)
Поэтому я хочу игнорировать это сообщение об ошибке, чтобы оно не было напечатано.но похоже это не возможно?Я даже пытался попробовать / исключить весь блок задач и циклов, но это не сработало.Он возвращает «AttributeError: объект _GeneratorContextManager» не имеет атрибута «run_until_complete» »
Я попытался переделать, поэтому код выглядит так:
@contextlib.contextmanager
def suppress_ssl_exception_report(self):
loop = asyncio.get_event_loop()
old_handler = loop.get_exception_handler()
old_handler_fn = old_handler or (lambda _loop, ctx: loop.default_exception_handler(ctx))
def ignore_exc(_loop, ctx):
exc = ctx.get('exception')
if isinstance(exc, SSLCertVerificationError):
return
old_handler_fn(loop, ctx)
loop.set_exception_handler(ignore_exc)
try:
yield
finally:
loop.set_exception_handler(old_handler)
return loop
tasks = [asyncio.ensure_future(self.run(proxy)) for proxy in proxy_list]
loop = self.suppress_ssl_exception_report()
loop.run_until_complete(asyncio.wait(tasks))
res = [task.result() for task in tasks if task.result()]