From a4d28791ed8360eaebf804c11bece439a9b242fe Mon Sep 17 00:00:00 2001 From: Raman Gupta <7243222+raman325@users.noreply.github.com> Date: Thu, 15 Jan 2026 12:34:44 -0500 Subject: [PATCH] server: python rpc should use create_task instead of run_coroutine_threadsafe (#1953) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit run_coroutine_threadsafe is designed for scheduling coroutines from a different thread onto the event loop. Since readLoop is already running as an async function on the event loop, using create_task is the correct and more efficient approach. This removes unnecessary thread-safe queue overhead for every RPC message. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-authored-by: Claude Opus 4.5 --- server/python/rpc_reader.py | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/server/python/rpc_reader.py b/server/python/rpc_reader.py index d3b3e7feb..885a3aa59 100644 --- a/server/python/rpc_reader.py +++ b/server/python/rpc_reader.py @@ -206,7 +206,7 @@ class RpcConnectionTransport(RpcTransport): return self.writeMessage(bytes(buffer), reject) -async def readLoop(loop, peer: rpc.RpcPeer, rpcTransport: RpcTransport): +async def readLoop(peer: rpc.RpcPeer, rpcTransport: RpcTransport): deserializationContext = {"buffers": []} while True: @@ -216,9 +216,7 @@ async def readLoop(loop, peer: rpc.RpcPeer, rpcTransport: RpcTransport): deserializationContext["buffers"].append(message) continue - asyncio.run_coroutine_threadsafe( - peer.handleMessage(message, deserializationContext), loop - ) + asyncio.create_task(peer.handleMessage(message, deserializationContext)) deserializationContext = {"buffers": []} @@ -246,7 +244,7 @@ async def prepare_peer_readloop(loop: AbstractEventLoop, rpcTransport: RpcTransp async def peerReadLoop(): try: - await readLoop(loop, peer, rpcTransport) + await readLoop(peer, rpcTransport) except: peer.kill() raise