From a911b268aa790a268d10acc775ff27d7456dbbab Mon Sep 17 00:00:00 2001 From: Yeuoly Date: Sun, 4 Jan 2026 17:49:19 +0800 Subject: [PATCH] feat: improve read behavior in QueueTransportReadCloser to handle initial data wait and subsequent immediate returns --- api/core/virtual_environment/channel/queue_transport.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/api/core/virtual_environment/channel/queue_transport.py b/api/core/virtual_environment/channel/queue_transport.py index e3b09bd92e..789492e644 100644 --- a/api/core/virtual_environment/channel/queue_transport.py +++ b/api/core/virtual_environment/channel/queue_transport.py @@ -74,7 +74,11 @@ class QueueTransportReadCloser(TransportReadCloser): to_return = self._drain_buffer(n) - while len(to_return) < n and not self._closed and self.q.qsize() > 0: + # At the first round reading from queue, hanging is required to wait for the data + # But after that, return immediately if no data is available + round = 0 + + while len(to_return) < n and not self._closed and (self.q.qsize() > 0 or round == 0): chunk = self.q.get() if chunk is None: self._closed = True @@ -92,6 +96,8 @@ class QueueTransportReadCloser(TransportReadCloser): # No more data needed, break break + round += 1 + return to_return def _drain_buffer(self, n: int) -> bytes: