This commit is contained in:
Yuriy Yuriev
2026-05-21 22:51:09 +07:00
parent 26038c6027
commit e51437f08e
5 changed files with 66 additions and 42 deletions
+20 -11
View File
@@ -372,20 +372,29 @@ class Socks5ProxyPool:
async def get_proxy_config(self, socks5_proxy) -> dict:
"""Получает или создает конфигурацию HTTP прокси для SOCKS5."""
key = socks5_proxy.id
# Быстрая проверка под lock'ом
async with self._lock:
if key in self._proxies:
self._last_used[key] = asyncio.get_running_loop().time()
return self._proxies[key].proxy_config_for_browser
# proxy.start() — медленная операция, запускаем вне lock'а
proxy = Socks5ToHttpProxy(
socks5_host=socks5_proxy.ip,
socks5_port=int(socks5_proxy.port),
username=socks5_proxy.login,
password=socks5_proxy.password
)
await proxy.start()
# Добавляем под lock'ом (двойная проверка — другая задача могла успеть)
async with self._lock:
if key not in self._proxies:
proxy = Socks5ToHttpProxy(
socks5_host=socks5_proxy.ip,
socks5_port=int(socks5_proxy.port),
username=socks5_proxy.login,
password=socks5_proxy.password
)
await proxy.start()
self._proxies[key] = proxy
loop = asyncio.get_running_loop()
self._last_used[key] = loop.time()
else:
await proxy.stop() # уже создан другой задачей
self._last_used[key] = asyncio.get_running_loop().time()
return self._proxies[key].proxy_config_for_browser
async def release(self, socks5_proxy):