fix: prevent duplicate replies in multi-worker routing
This commit is contained in:
@@ -24,9 +24,10 @@ logger = logging.getLogger(__name__)
|
||||
class WorkerProcess:
|
||||
"""工作进程"""
|
||||
|
||||
def __init__(self, worker_id: int, shard_keys: List[str], enable_agent: bool = True):
|
||||
def __init__(self, worker_id: int, shard_keys: List[str], num_workers: int, enable_agent: bool = True):
|
||||
self.worker_id = worker_id
|
||||
self.shard_keys = shard_keys
|
||||
self.num_workers = max(1, int(num_workers))
|
||||
self.enable_agent = enable_agent
|
||||
self.process = None
|
||||
|
||||
@@ -34,17 +35,18 @@ class WorkerProcess:
|
||||
"""启动工作进程"""
|
||||
self.process = Process(
|
||||
target=self._run,
|
||||
args=(self.worker_id, self.shard_keys, self.enable_agent),
|
||||
args=(self.worker_id, self.shard_keys, self.num_workers, self.enable_agent),
|
||||
name=f"ai-cs-worker-{self.worker_id}"
|
||||
)
|
||||
self.process.start()
|
||||
logger.info(f"Worker {self.worker_id} 启动 (PID: {self.process.pid})")
|
||||
|
||||
def _run(self, worker_id: int, shard_keys: List[str], enable_agent: bool):
|
||||
def _run(self, worker_id: int, shard_keys: List[str], num_workers: int, enable_agent: bool):
|
||||
"""工作进程入口"""
|
||||
try:
|
||||
# 设置进程环境变量
|
||||
os.environ['AI_CS_WORKER_ID'] = str(worker_id)
|
||||
os.environ['AI_CS_WORKER_COUNT'] = str(max(1, int(num_workers)))
|
||||
os.environ['AI_CS_SHARD_KEYS'] = ','.join(shard_keys)
|
||||
|
||||
# 导入并启动 WebSocket 客户端
|
||||
@@ -120,6 +122,7 @@ class Coordinator:
|
||||
worker = WorkerProcess(
|
||||
worker_id=worker_id,
|
||||
shard_keys=shards.get(worker_id, []),
|
||||
num_workers=self.num_workers,
|
||||
enable_agent=self.enable_agent
|
||||
)
|
||||
worker.start()
|
||||
|
||||
Reference in New Issue
Block a user