Skip to content

Speed up json.dumps() for small documents #150820

Description

@gaborbernat

json.dumps() runs through the pure-Python iterencode() wrapper on every call, even though the C accelerator does the actual encoding. That wrapper builds a float-formatting helper closure each time it runs, regardless of whether the document contains any floats and regardless of whether the fast C path (which never uses the helper) is taken. For the small documents that dominate real traffic, that per-call setup is a measurable slice of the work.

Most JSON crossing a service boundary is small: an API response, a single record, a config fragment. Web frameworks, RPC layers and log shippers encode these short payloads constantly, one per request or record, so the fixed per-call cost adds up.

Over 20 small documents, building the float helper only on the slower Python encoding path makes json.dumps() about 8% faster, consistently across float-heavy, mixed and no-float payloads. The win applies to the default build with the C accelerator, since the wrapper that carries this overhead is written in Python.

Linked PRs

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    performancePerformance or resource usagestdlibStandard Library Python modules in the Lib/ directorytype-featureA feature request or enhancement

    Projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions