Skip to content

Conversation

@vstinner
Copy link
Member

@vstinnervstinner commented Jul 1, 2020

  • 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
Copy link
MemberAuthor

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 freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@vstinner@the-knights-who-say-ni@bedevere-bot