fix some
This commit is contained in:
@@ -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):
|
||||
|
||||
Reference in New Issue
Block a user