@razinns

Почему при большом количестве строк async выдает ошибку?

Вот код программы:
import asyncio
import aiohttp
import json

a = input("File: ")
file = open(a).read().split('\n')

async def get_data(combo):
link = "https://ipcalc.co/ipdata/"
ip = combo.split(":")[0]
port = combo.split(":")[1]
proxy = ip + ":" + port
async with aiohttp.ClientSession() as session:
async with session.get(link+ip) as response:
result = await response.text()
jj = json.loads(result)
located = jj['country']["name"]
print(located)
with open('country_'+located+'.txt', 'a') as sX:
sX.write(proxy + '\n')

async def task_data():
tasks = []
for combo in file:
task = asyncio.create_task(get_data(combo))
tasks.append(task)
await asyncio.gather(*tasks)

asyncio.run(task_data())

Программа проверяет местоположение прокси. Если загрузить файл с 1000 строк все нормально. Если 1500+ программа не работает и выдает такие ошибки.

Ошибка
Traceback (most recent call last):
Traceback (most recent call last):
File "D:\Files\asyn_ip\main.py", line 29, in
asyncio.run(task_data())
File "C:\Users\Raz\AppData\Local\Programs\Python\Python311\Lib\asyncio\runners.py", line 190, in run
return runner.run(main)
^^^^^^^^^^^^^^^^
File "C:\Users\Raz\AppData\Local\Programs\Python\Python311\Lib\asyncio\runners.py", line 118, in run
return self._loop.run_until_complete(task)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\Raz\AppData\Local\Programs\Python\Python311\Lib\asyncio\base_events.py", line 653, in run_until_complete
return future.result()
^^^^^^^^^^^^^^^
File "D:\Files\asyn_ip\main.py", line 26, in task_data
await asyncio.gather(*tasks)
File "D:\Files\asyn_ip\main.py", line 10, in get_data
port = combo.split(":")[1]
~~~~~~~~~~~~~~~~^^^
IndexError: list index out of range


Ошибка 2
Traceback (most recent call last):
File "C:\Users\Raz\AppData\Local\Programs\Python\Python311\Lib\site-packages\aiohttp\connector.py", line 980, in _wrap_create_connection
return await self._loop.create_connection(*args, **kwargs) # type: ignore[return-value] # noqa
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\Raz\AppData\Local\Programs\Python\Python311\Lib\asyncio\base_events.py", line 1085, in create_connection
raise exceptions[0]
File "C:\Users\Raz\AppData\Local\Programs\Python\Python311\Lib\asyncio\base_events.py", line 1069, in create_connection
sock = await self._connect_sock(
^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\Raz\AppData\Local\Programs\Python\Python311\Lib\asyncio\base_events.py", line 973, in _connect_sock
await self.sock_connect(sock, address)
File "C:\Users\Raz\AppData\Local\Programs\Python\Python311\Lib\asyncio\proactor_events.py", line 726, in sock_connect
return await self._proactor.connect(sock, address)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\Raz\AppData\Local\Programs\Python\Python311\Lib\asyncio\windows_events.py", line 622, in connect
_overlapped.BindLocal(conn.fileno(), conn.family)
OSError: [WinError 10055] Невозможно выполнить операцию на сокете, т.к. буфер слишком мал или очередь переполнена

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
File "D:\Files\asyn_ip\main.py", line 29, in
asyncio.run(task_data())
File "C:\Users\Raz\AppData\Local\Programs\Python\Python311\Lib\asyncio\runners.py", line 190, in run
return runner.run(main)
^^^^^^^^^^^^^^^^
File "C:\Users\Raz\AppData\Local\Programs\Python\Python311\Lib\asyncio\runners.py", line 118, in run
return self._loop.run_until_complete(task)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\Raz\AppData\Local\Programs\Python\Python311\Lib\asyncio\base_events.py", line 653, in run_until_complete
return future.result()
^^^^^^^^^^^^^^^
File "D:\Files\asyn_ip\main.py", line 26, in task_data
await asyncio.gather(*tasks)
File "D:\Files\asyn_ip\main.py", line 13, in get_data
async with session.get(link+ip) as response:
File "C:\Users\Raz\AppData\Local\Programs\Python\Python311\Lib\site-packages\aiohttp\client.py", line 1167, in __aenter__
self._resp = await self._coro
^^^^^^^^^^^^^^^^
File "C:\Users\Raz\AppData\Local\Programs\Python\Python311\Lib\site-packages\aiohttp\client.py", line 562, in _request
conn = await self._connector.connect(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\Raz\AppData\Local\Programs\Python\Python311\Lib\site-packages\aiohttp\connector.py", line 540, in connect
proto = await self._create_connection(req, traces, timeout)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\Raz\AppData\Local\Programs\Python\Python311\Lib\site-packages\aiohttp\connector.py", line 901, in _create_connection
_, proto = await self._create_direct_connection(req, traces, timeout)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\Raz\AppData\Local\Programs\Python\Python311\Lib\site-packages\aiohttp\connector.py", line 1209, in _create_direct_connection
raise last_exc
File "C:\Users\Raz\AppData\Local\Programs\Python\Python311\Lib\site-packages\aiohttp\connector.py", line 1178, in _create_direct_connection
transp, proto = await self._wrap_create_connection(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\Raz\AppData\Local\Programs\Python\Python311\Lib\site-packages\aiohttp\connector.py", line 988, in _wrap_create_connection
raise client_error(req.connection_key, exc) from exc
aiohttp.client_exceptions.ClientConnectorError: Cannot connect to host ipcalc.co:443 ssl:default [Невозможно выполнить операцию на сокете, т.к. буфер слишком мал или очередь переполнена]
  • Вопрос задан
  • 152 просмотра
Решения вопроса 1
@razinns Автор вопроса
Все починил используя asyncio.Semaphore
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@va_k
Потому-что на какойто строке указан прокси без порта или без :
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы