[Python-Dev] Change PEP 399 import recommendation (original) (raw)

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