Uh oh!
There was an error while loading.Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork33.4k
bpo-1635741: port _elementtree to multi-phase init (PEP 489)#23535
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to ourterms of service andprivacy statement. We’ll occasionally send you account related emails.
Already on GitHub?Sign in to your account
Uh oh!
There was an error while loading.Please reload this page.
Conversation
koubaa commentedNov 28, 2020
@vstinner@shihai1991@corona10 please review |
tiran left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
The patch looks like it was a lot of work. Thanks for investing your time to port_elementtree.
I'm a bit worried that the module state getter is going to affect performance negatively. The code has to use the slow_PyType_GetModuleByDef() API. In my patch for the_ssl module I added a module state pointer to instance structs. For example you could addstate totypedef struct ElementObject and then reference the state withself->state. This would reduce the amount of get state calls and simplify the code.
What do you think? Is this a safe apprach?
| #defineET_STATE_GLOBAL \ | ||
| ((elementtreestate *) PyModule_GetState(PyState_FindModule(&elementtreemodule))) | ||
| staticinlineelementtreestate* | ||
| get_elementtree_module_state_by_object(void*object) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
The qualifierobject is not self-explanatory. Every Python object is an object. This includes module objects and type objects. How about:
| get_elementtree_module_state_by_object(void*object) | |
| get_elementtree_module_state_by_instance(PyObject*self) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
How about expendget_element_module_state() to receiveself object ortype object?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
@tiran I tried usingPyObject * and that gives a lot of compiler warnings (see somem below):
C:\Dev\OSS\cpython\cpython\Modules_elementtree.c(3749,74): warning C4133: 'function': incompatible types - from 'XMLParserObject *' to 'PyObject *' [C:\Dev\OSS\cpython\cpython\PCbuild_elementtree.vcxproj]
C:\Dev\OSS\cpython\cpython\Modules\clinic_elementtree.c.h(26,52): warning C4133: 'function': incompatible types - from 'ElementObject *' to 'PyObject *' [C:\Dev\OSS\cpython\cpython\PCbuild_elementtree.vcxproj]
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
@shihai1991 do you mean two methods, one for each?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
yes. just my personal suggestion :)
Uh oh!
There was an error while loading.Please reload this page.
Uh oh!
There was an error while loading.Please reload this page.
| class _elementtree.Element "ElementObject *" "get_elementtree_module_state_by_object(self)->element_type" | ||
| class _elementtree.TreeBuilder "TreeBuilderObject *" "get_elementtree_module_state_by_object(self)->tree_builder_type" | ||
| class _elementtree.XMLParser "XMLParserObject *" "get_elementtree_module_state_by_object(self)->xml_parser_type" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
Is this correct? AFAIK the argument clinic code has only access totype, not toself.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
@tiran This is where I got from trial and error, see the implementation of _elementtree_Element_append in Modules/clinic/_elementtree.c.h
bedevere-bot commentedNov 28, 2020
A Python core developer has requested some changes be made to your pull request before we can consider merging it. If you could please address their requests along with any other requests in other reviews from core developers that would be appreciated. Once you have made the requested changes, please leave a comment on this pull request containing the phrase |
koubaa commentedNov 28, 2020
@tiran I'm not sure if its safe but I understand it in principle. I don't know exactly the lifetime of instance structs when pickling.@vstinner thoughts on that approach? Is there a benchmark I could try to measure the performance impact? _PyType_GetModuleByDef seems to only be slow if there is significant subclassing so I could try to whip up an example that tries to overdo that. |
erlend-aasland commentedDec 1, 2020
This PR introduces a ref. leak (looks similar to the ref. leak I had in PR#23428): |
koubaa commentedDec 11, 2020
@erlend-aasland oof sorry, I didn't realize you were working on this module too. Any tips to find the cause of the ref leak or which reference is leaking? I'm not too familiar with the diagnostics & telemetry available. |
erlend-aasland commentedDec 11, 2020 • edited
Loading Uh oh!
There was an error while loading.Please reload this page.
edited
Uh oh!
There was an error while loading.Please reload this page.
No problem, you're fine! Feel free to take a look at my PR. I haven't been able to devote any free time to this the last month or so, anyway.
Me neither. It kinda stopped when I encountered the ref. leak. I use |
This PR is stale because it has been open for 30 days with no activity. |
iritkatriel commentedApr 11, 2022
https://bugs.python.org/issue1635741 is closed. What is that status of this PR? |
vstinner commentedApr 19, 2022
The change is still relevant, but should use a new issue number. Moreover, the SC asked to put the conversion of static types to heap types on hold.@encukou and@erlend-aasland wrotehttps://peps.python.org/pep-0687/ which may unblock the situation but it's still a draft. |
erlend-aasland commentedJun 27, 2022
erlend-aasland commentedMar 14, 2023
Superseded bygh-101285 |
Uh oh!
There was an error while loading.Please reload this page.
https://bugs.python.org/issue1635741