[Python-Dev] Change PEP 399 import recommendation

R. David Murray rdmurray at bitdance.com
Sat Oct 12 16:46:02 CEST 2013


On Sat, 12 Oct 2013 16:04:23 +0200, Stefan Behnel <stefan_ml at behnel.de> wrote:
> Stefan Krah, 12.10.2013 15:41:
> > Nick Coghlan wrote:
> >> On 12 Oct 2013 05:49, "Eric Snow" wrote:
> >>> On Fri, Oct 11, 2013 at 1:41 PM, Stefan Krah wrote:
> >>>> Antoine Pitrou wrote:
> >>>>> Just create a _pydecimal module (like _pyio).
> >>>>
> >>>> That's very fast indeed. There's one minor problem: For backwards
> >> compatibility
> >>>> and pickling [1] I'd need to add
> >>>>
> >>>>     __module__ = 'decimal'
> >>>>
> >>>> to every class of the Python version. Are there any reasons not to do that?
> >>>
> >>> Try just putting "__name__ = 'decimal'" at the top of the source file.
> >>
> >> In this case the fixup needs to be conditional on the absence of "_decimal".
> >> Aside from that, yes, lying about name is the easiest way to preserve pickle
> >> compatibility while still moving code around.
> > 
> > Thanks Eric and Nick. The setup pretty much works (see issue #19232) and the
> > import speedup is quite large. I wonder if Cpython's startup time could be
> > reduced if this strategy was applied to other modules as well (see #19229).
> > 
> > There are some concerns whether the change would impact other Python
> > implementations, so I changed the subject (hoping for feedback).
> 
> FWIW, I think this definitely makes sense in cases where the C
> implementation is essentially a complete replacement of the original
> module, such as in this case. I even sometimes suggest compiling Python
> modules with Cython if the import time matters.
> 
> For "normal" accelerator modules that only replace a part of a Python
> module with a native implementation, this is less likely to make a large
> enough difference to make up for the additional complexity due to the code
> split.

The impact on other implementations is: what if they write an
accelerator that only replaces part of the module, whereas CPython's
replaces the whole thing?

But I think we could just postpone dealing with that until it actually
comes up, just as we would if some other implementation writes an
accelerator for a module for which CPython doesn't have one.

--David


More information about the Python-Dev mailing list