Re: [Python-Dev] PEP 489: Redesigning extension module loading

2015年3月16日 08:45:12 -0700

On 16 March 2015 Petr Viktorin wrote:
> If PyModuleCreate is not defined, PyModuleExec is expected to operate
> on any Python object for which attributes can be added by PyObject_GetAttr*
> and retrieved by PyObject_SetAttr*.
I assume it is the other way around (add with Set and retrieve with Get),
rather than a description of the required form of magic.
> PyObject *PyModule_AddCapsule(
> PyObject *module,
> const char *module_name,
> const char *attribute_name,
> void *pointer,
> PyCapsule_Destructor destructor)
What happens if module_name doesn't match the module's __name__?
Does it become a hidden attribute? A dotted attribute? Is the
result undefined?
Later, there is
> void *PyModule_GetCapsulePointer(
> PyObject *module,
> const char *module_name,
> const char *attribute_name)
with the same apparently redundant arguments, but not a
PyModule_SetCapsulePointer. Are capsule pointers read-only, or can
they be replaced with another call to PyModule_AddCapsule, or by a
simple PyObject_SetAttr?
> Subinterpreters and Interpreter Reloading
...
> No user-defined functions, methods, or instances may leak to different
> interpreters.
By "user-defined" do you mean "defined in python, as opposed to in
the extension itself"?
If so, what is the recommendation for modules that do want to support,
say, callbacks? A dual-layer mapping that uses the interpreter as the
first key? Naming it _module and only using it indirectly through
module.py, which is not shared across interpreters? Not using this
API at all?
> To achieve this, all module-level state should be kept in either the module
> dict, or in the module object.
I don't see how that is related to leakage.
> A simple rule of thumb is: Do not define any static data, except 
> built-in types
> with no mutable or user-settable class attributes.
What about singleton instances? Should they be per-interpreter?
What about constants, such as PI?
Where should configuration variables (e.g., MAX_SEARCH_DEPTH) be
kept?
What happens if this no-leakage rule is violated? Does the module
not load, or does it just maybe lead to a crash down the road?
-jJ
--
If there are still threading problems with my replies, please
email me with details, so that I can try to resolve them. -jJ
_______________________________________________
Python-Dev mailing list
[email protected]
https://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
https://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com

Reply via email to