[ 
https://issues.apache.org/jira/browse/THRIFT-6267?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Jens Geyer resolved THRIFT-6267.
--------------------------------
    Fix Version/s: 0.25.0
         Assignee: Jens Geyer
       Resolution: Fixed

> Python: TNonblockingServer rebuilds its whole read buffer on every socket read
> ------------------------------------------------------------------------------
>
>                 Key: THRIFT-6267
>                 URL: https://issues.apache.org/jira/browse/THRIFT-6267
>             Project: Thrift
>          Issue Type: Improvement
>          Components: Python - Library
>            Reporter: Jens Geyer
>            Assignee: Jens Geyer
>            Priority: Minor
>             Fix For: 0.25.0
>
>          Time Spent: 20m
>  Remaining Estimate: 0h
>
> {{lib/py/src/server/TNonblockingServer.py:145}}, in {{Connection.read()}}:
> {code:python}
> self._rbuf += read
> {code}
> {{bytes}} is immutable, so each append copies everything received so far. 
> Reading a message in n chunks costs O(n^2) bytes copied; for a message that 
> arrives in many small segments, most of the work is recopying.
> The frame maximum added for this server bounds how far it can run, so this is 
> a cost question rather than a correctness one.
> h2. Suggested
> Accumulate into a {{list}} of chunks and {{b"".join()}} once the frame is 
> complete, or read into a {{bytearray}} and slice it.
> _Drafted with AI assistance (Claude Opus 5); reviewed and filed by Jens 
> Geyer._



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to