Skip to content

bpo-1635741: Release Unicode interned strings at exit - #21269

Merged
vstinner merged 1 commit into
python:masterfrom
vstinner:clear_interned
Jul 1, 2020
Merged

bpo-1635741: Release Unicode interned strings at exit#21269
vstinner merged 1 commit into
python:masterfrom
vstinner:clear_interned

Conversation

@vstinner

@vstinner vstinner commented Jul 1, 2020

Copy link
Copy Markdown
Member
  • PyUnicode_InternInPlace() now ensures that interned strings are
    ready.
  • Add _PyUnicode_ClearInterned().
  • Py_Finalize() now releases Unicode interned strings:
    call _PyUnicode_ClearInterned().

https://bugs.python.org/issue1635741

* PyUnicode_InternInPlace() now ensures that interned strings are
  ready.
* Add _PyUnicode_ClearInterned().
* Py_Finalize() now releases Unicode interned strings:
  call _PyUnicode_ClearInterned().
@vstinner

vstinner commented Jul 1, 2020

Copy link
Copy Markdown
Member Author

Python has between 1446 (./python -sSI -c pass command) and 4660 (run 19 tests using ./python -m test and interrupt it after around 19 tests) interned strings at exit.

This PR has no significant impact on timing of the ./python -sSI -c pass command:

# benchmark
$ python3 -m pyperf command -o ref.json -- ./python -sSI -c pass
# switch to the PR branch, make
$ python3 -m pyperf command -o clear.json -- ./python -sSI -c pass

$ python3 -m pyperf show ref.json 
Mean +- std dev: 7.56 ms +- 0.24 ms

$ python3 -m pyperf compare_to ref.json clear.json
Benchmark hidden because not significant (1): command

@shihai1991 proposed PR #21087 to solve the same problem. My PR clears interned strings before calling _PyDict_Fini() and _PyList_Fini(), since _PyUnicode_ClearInterned() uses a dict and a list.

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

3 participants