python / python/cpython

b"".join should release GIL in case of memoryview

Offen
#148,323 5 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

interpreter-core performance type-feature
Vorherrschende Sprache
Python
Sterne
77.2k
Forks
35.9k
PR-Merge-Kennzahlen
PR-Kennzahlen ausstehend

Beschreibung

Bug report

Bug description:

CPython PR #17757 allowed the GIL to be released during b"".join() operations. However, this optimization currently only triggers if every passed object is of type bytes; it falls back to acquiring the GIL if it encounters mutable buffers. While reacquiring the GIL is necessary for mutable types like bytearray, we can still safely drop the GIL for memoryview objects that expose immutable bytes.

Please refer to https://github.com/fsspec/gcsfs/pull/795#discussion_r3032749881 for more context.

cc: @martindurant

CPython versions tested on:

CPython main branch

Operating systems tested on:

Linux

Linked PRs
  • gh-148456

Beitragsleitfaden

Beitragsleitfaden öffnen

Erste Schritte

  1. Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
  3. Forke das Repository und arbeite in einem Branch.
  4. Öffne einen Pull Request, der die Issue-Nummer nennt.

Rechercherichtung

Beginne mit der Durchsicht von CPython PR #17757 und dem verknüpften PR gh-148456 und verfolge anschließend die Behandlung von b"".join für memoryview-Objekte. Erledigt ist die Aufgabe, wenn memoryviews mit unveränderlichen Bytes den GIL-freigebenden Pfad verwenden können, während veränderliche Puffer den GIL weiterhin erneut erwerben, und das entsprechende Verhalten durch Tests abgedeckt ist.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
python
Bereich
performance
Issue-Typ
Bug
Schwierigkeit
4/5
Geschätzter Aufwand
3-5 Tage
Aktivitätsstatus
Veraltet
Klarheit
Größtenteils klar
Anfängerfreundlichkeit
35/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.