[Python-Dev] Change PEP 399 import recommendation

Stefan Behnel stefan_ml at behnel.de
Sat Oct 12 16:04:23 CEST 2013


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.

Stefan




More information about the Python-Dev mailing list