feat: stabilize multi-region runtime sync and worker orchestration
This commit is contained in:
@@ -11,6 +11,7 @@
|
||||
import json
|
||||
import os
|
||||
import threading
|
||||
from collections import OrderedDict
|
||||
from datetime import datetime, timezone, timedelta # 日期时间处理,用于时区转换
|
||||
from typing import Optional
|
||||
|
||||
@@ -22,10 +23,24 @@ _DIRECT_HTTP = requests.Session()
|
||||
_DIRECT_HTTP.trust_env = False
|
||||
_DIRECT_HTTP.mount("http://", requests.adapters.HTTPAdapter(pool_connections=256, pool_maxsize=512, max_retries=0))
|
||||
_DIRECT_HTTP.mount("https://", requests.adapters.HTTPAdapter(pool_connections=256, pool_maxsize=512, max_retries=0))
|
||||
_PROXY_MANAGERS = {}
|
||||
_PROXY_MANAGERS = OrderedDict()
|
||||
_PROXY_MANAGER_LOCK = threading.Lock()
|
||||
|
||||
|
||||
def _proxy_manager_cache_limit() -> int:
|
||||
try:
|
||||
return max(1, int(os.getenv("DOMAINCHECK_REGISTER_PROXY_SESSION_CACHE_SIZE", "128") or 128))
|
||||
except Exception:
|
||||
return 128
|
||||
|
||||
|
||||
def _close_session_quietly(session) -> None:
|
||||
try:
|
||||
session.close()
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
|
||||
def _get_http_manager(proxies: Optional[dict] = None):
|
||||
proxy_url = ""
|
||||
if proxies:
|
||||
@@ -34,12 +49,17 @@ def _get_http_manager(proxies: Optional[dict] = None):
|
||||
return _DIRECT_HTTP
|
||||
with _PROXY_MANAGER_LOCK:
|
||||
manager = _PROXY_MANAGERS.get(proxy_url)
|
||||
if manager is None:
|
||||
manager = requests.Session()
|
||||
manager.trust_env = False
|
||||
manager.mount("http://", requests.adapters.HTTPAdapter(pool_connections=128, pool_maxsize=256, max_retries=0))
|
||||
manager.mount("https://", requests.adapters.HTTPAdapter(pool_connections=128, pool_maxsize=256, max_retries=0))
|
||||
_PROXY_MANAGERS[proxy_url] = manager
|
||||
if manager is not None:
|
||||
_PROXY_MANAGERS.move_to_end(proxy_url)
|
||||
return manager
|
||||
manager = requests.Session()
|
||||
manager.trust_env = False
|
||||
manager.mount("http://", requests.adapters.HTTPAdapter(pool_connections=128, pool_maxsize=256, max_retries=0))
|
||||
manager.mount("https://", requests.adapters.HTTPAdapter(pool_connections=128, pool_maxsize=256, max_retries=0))
|
||||
_PROXY_MANAGERS[proxy_url] = manager
|
||||
while len(_PROXY_MANAGERS) > _proxy_manager_cache_limit():
|
||||
_, stale_manager = _PROXY_MANAGERS.popitem(last=False)
|
||||
_close_session_quietly(stale_manager)
|
||||
return manager
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user