From 4de709ad4b0926505b0158764d9dcf20dfe913d6 Mon Sep 17 00:00:00 2001 From: Andy Lee Date: Sun, 10 Aug 2025 08:30:02 +0000 Subject: [PATCH] feat: add ZMQ timeout configurations to prevent hanging MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Add RCVTIMEO (300s) to prevent recv operations from hanging indefinitely - Add SNDTIMEO (300s) to prevent send operations from hanging indefinitely - Add IMMEDIATE mode to avoid message queue blocking - Applied to both api.py and searcher_base.py ZMQ socket connections This ensures ZMQ operations timeout gracefully instead of hanging the process when embedding servers become unresponsive. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --- packages/leann-core/src/leann/api.py | 3 +++ packages/leann-core/src/leann/searcher_base.py | 3 +++ 2 files changed, 6 insertions(+) diff --git a/packages/leann-core/src/leann/api.py b/packages/leann-core/src/leann/api.py index 6c773c4..bc8cbef 100644 --- a/packages/leann-core/src/leann/api.py +++ b/packages/leann-core/src/leann/api.py @@ -88,6 +88,9 @@ def compute_embeddings_via_server(chunks: list[str], model_name: str, port: int) context = zmq.Context() socket = context.socket(zmq.REQ) socket.setsockopt(zmq.LINGER, 0) # Don't block on close + socket.setsockopt(zmq.RCVTIMEO, 300000) # 300秒接收超时 + socket.setsockopt(zmq.SNDTIMEO, 300000) # 300秒发送超时 + socket.setsockopt(zmq.IMMEDIATE, 1) # 立即模式,避免队列阻塞 socket.connect(f"tcp://localhost:{port}") try: diff --git a/packages/leann-core/src/leann/searcher_base.py b/packages/leann-core/src/leann/searcher_base.py index fbe749f..d1dfa0c 100644 --- a/packages/leann-core/src/leann/searcher_base.py +++ b/packages/leann-core/src/leann/searcher_base.py @@ -138,6 +138,9 @@ class BaseSearcher(LeannBackendSearcherInterface, ABC): context = zmq.Context() socket = context.socket(zmq.REQ) socket.setsockopt(zmq.LINGER, 0) # Don't block on close + socket.setsockopt(zmq.RCVTIMEO, 300000) # 300秒接收超时 + socket.setsockopt(zmq.SNDTIMEO, 300000) # 300秒发送超时 + socket.setsockopt(zmq.IMMEDIATE, 1) # 立即模式,避免队列阻塞 socket.connect(f"tcp://localhost:{zmq_port}") # Send embedding request