Hacktoberfest 2026 : les issues que les mainteneurs ont marquées pour octobre, ouvertes et accessibles aux débutants. Parcourir les issues Hacktoberfest

Option to skip per-method docstring generation in build() (memory / high-concurrency)

Ouverte
#2,779 0 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Les mainteneurs répondent en général sous 1 jour

@rootkiller6788 y travaille déjà.

Depuis le 21/9/2026.

  • #2822 par @rootkiller6788 — ouverte

Évaluation

Difficulté
4/5
Temps estimé
3-5 jours
Accessibilité débutants
52/100
Type d'issue
Fonctionnalité
Clarté
Plutôt claire
Activité
Calme
Stack technique
python
Domaine
api, backend

Piste de recherche

Commencez par build() et suivez discovery.createMethod, schema.Schemas.prettyPrintSchema et prettyPrintByName pour voir où les chaînes de documentation de response-schema sont générées lors de la construction des services et des sous-ressources lazy. Reproduisez le profil mémoire de Sheets v4 décrit dans l’issue ; le travail est terminé lorsqu’une option de build prise en charge ignore cette génération sans affecter la construction normale lorsqu’elle est activée.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Description

Feature request: an option to skip per-method docstring generation in build()

Problem

build() (and lazy sub-resource construction) generates a fully-expanded, recursively
pretty-printed prototype of each method's response schema and attaches it as
method.__doc__ (discovery.createMethod → schema.Schemas.prettyPrintSchema /
prettyPrintByName). For APIs with large, deeply-nested schemas this is very expensive, and it
is paid every time a service/resource is constructed.

Concrete numbers from profiling Sheets v4 (google-api-python-client==2.198.0, Python 3.13),
measured with RSS (no tracemalloc, to avoid its overhead):

  • Building the service, then touching one sub-resource (service.spreadsheets(), no API
    call
    ): ~66 MB.
  • Of that, ~99.9% is the docstring schema expansion — no-oping prettyPrintSchema/
    prettyPrintByName drops it to ~1 MB. The .spreadsheets() methods themselves are ~24 KB.
  • The docstrings are only useful for interactive help(); in a server they are never read.
Impact

In a concurrent server (a fresh service built per request, common with per-user credentials),
these allocations are not shared across in-flight requests. 8 concurrent Sheets requests
each build ~66 MB of docstrings simultaneously ≈ 530 MB peak, which OOM-kills a
memory-limited container. This is the concurrent-peak sibling of the long-standing
reference-cycle memory issue in #535 (whose recommended fix — build/reuse a single service — is
not always feasible when credentials differ per request).

Request

A supported way to skip docstring generation at build time, e.g.:

build("sheets", "v4", credentials=creds, generate_docstrings=False)
# or a module/env toggle

Today the only options are to monkeypatch Schemas.prettyPrintSchema/prettyPrintByName
(fragile across versions) or fork. A first-class flag would let memory-constrained / high-
concurrency deployments opt out of documentation strings they never use.

Environment
  • google-api-python-client==2.198.0, Python 3.13
  • Reproly: build any large-schema API (Sheets v4), touch a sub-resource, measure RSS; repeat
    concurrently to see the multiplier.

Related: #535 (memory from repeated build() / reference cycles).

Langage dominant
Python
Étoiles
8.9k
Forks
2.6k
Merge moyen
8 h 37 min
PR mergées (30 j)
7

Préparer son environnement

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Autres issues de googleapis/google-api-python-client

Toutes les issues de googleapis/google-api-python-client

Issues similaires

Plus d'issues Python

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.