diff --git a/out_service/cd.py b/out_service/cd.py index 567eaab4..19d18d41 100644 --- a/out_service/cd.py +++ b/out_service/cd.py @@ -4,14 +4,21 @@ from urllib.parse import urlparse, parse_qs import socket import threading -sc_all = { - "192.168.1.220_6000": None, - "192.168.1.235_6000": None, - "192.168.1.225_6000": None, - "192.168.1.230_6000": None, -} +sc_all = {} +sc_locks = {} +registry_lock = threading.Lock() -sc_locks = {addr: threading.Lock() for addr in sc_all} + +def get_lock(addr): + lock = sc_locks.get(addr) + if lock is None: + with registry_lock: + lock = sc_locks.get(addr) + if lock is None: + lock = threading.Lock() + sc_locks[addr] = lock + sc_all.setdefault(addr, None) + return lock def get_checksum(body_msg): return sum(body_msg) & 0xFF @@ -106,13 +113,10 @@ class JSONRequestHandler(BaseHTTPRequestHandler): host = query_params.get('host', ['127.0.0.1'])[0] port = query_params.get('port', ['6000'])[0] addr = f'{host}_{port}' - - if addr not in sc_all: - self.error(f'{addr} 未找到') - return + lock = get_lock(addr) def request_once(): - with sc_locks[addr]: + with lock: sc = sc_all[addr] try: if sc is None: