[Python-Dev] [Python-checkins] cpython: Issue #19209: Remove import of copyreg from the os module to speed up
Nick Coghlan
ncoghlan at gmail.com
Sat Oct 12 01:32:50 CEST 2013
On 12 Oct 2013 09:27, "christian.heimes" <python-checkins at python.org> wrote:
>
> http://hg.python.org/cpython/rev/29c4a6a11e76
> changeset: 86216:29c4a6a11e76
> user: Christian Heimes <christian at cheimes.de>
> date: Sat Oct 12 01:27:08 2013 +0200
> summary:
> Issue #19209: Remove import of copyreg from the os module to speed up
> interpreter startup. stat_result and statvfs_result are now hard-coded to
> reside in the os module.
> The patch is based on Victor Stinner's patch.
>
> files:
> Lib/os.py | 27 ---------------------------
> Lib/test/test_os.py | 22 ++++++++++++++++++++++
> Lib/test/test_site.py | 5 ++++-
> Misc/NEWS | 4 ++++
> Modules/posixmodule.c | 4 ++--
> 5 files changed, 32 insertions(+), 30 deletions(-)
>
>
> diff --git a/Lib/os.py b/Lib/os.py
> --- a/Lib/os.py
> +++ b/Lib/os.py
> @@ -945,33 +945,6 @@
> __all__.extend(["spawnlp", "spawnlpe"])
>
>
> -import copyreg as _copyreg
> -
> -def _make_stat_result(tup, dict):
> - return stat_result(tup, dict)
> -
> -def _pickle_stat_result(sr):
> - (type, args) = sr.__reduce__()
> - return (_make_stat_result, args)
> -
> -try:
> - _copyreg.pickle(stat_result, _pickle_stat_result, _make_stat_result)
> -except NameError: # stat_result may not exist
> - pass
> -
> -def _make_statvfs_result(tup, dict):
> - return statvfs_result(tup, dict)
> -
> -def _pickle_statvfs_result(sr):
> - (type, args) = sr.__reduce__()
> - return (_make_statvfs_result, args)
> -
> -try:
> - _copyreg.pickle(statvfs_result, _pickle_statvfs_result,
> - _make_statvfs_result)
> -except NameError: # statvfs_result may not exist
> - pass
> -
> # Supply os.popen()
> def popen(cmd, mode="r", buffering=-1):
> if not isinstance(cmd, str):
> diff --git a/Lib/test/test_os.py b/Lib/test/test_os.py
> --- a/Lib/test/test_os.py
> +++ b/Lib/test/test_os.py
> @@ -26,6 +26,7 @@
> import codecs
> import decimal
> import fractions
> +import pickle
> try:
> import threading
> except ImportError:
> @@ -264,6 +265,13 @@
> warnings.simplefilter("ignore", DeprecationWarning)
> self.check_stat_attributes(fname)
>
> + def test_stat_result_pickle(self):
> + result = os.stat(self.fname)
> + p = pickle.dumps(result)
> + self.assertIn(b'\x03cos\nstat_result\n', p)
> + unpickled = pickle.loads(p)
> + self.assertEqual(result, unpickled)
> +
> def test_statvfs_attributes(self):
> if not hasattr(os, "statvfs"):
> return
> @@ -310,6 +318,20 @@
> except TypeError:
> pass
>
> + @unittest.skipUnless(hasattr(os, 'statvfs'),
> + "need os.statvfs()")
> + def test_statvfs_result_pickle(self):
> + try:
> + result = os.statvfs(self.fname)
> + except OSError as e:
> + # On AtheOS, glibc always returns ENOSYS
> + if e.errno == errno.ENOSYS:
> + return
> + p = pickle.dumps(result)
> + self.assertIn(b'\x03cos\nstatvfs_result\n', p)
> + unpickled = pickle.loads(p)
> + self.assertEqual(result, unpickled)
> +
> def test_utime_dir(self):
> delta = 1000000
> st = os.stat(support.TESTFN)
> diff --git a/Lib/test/test_site.py b/Lib/test/test_site.py
> --- a/Lib/test/test_site.py
> +++ b/Lib/test/test_site.py
> @@ -431,10 +431,13 @@
> modules = eval(stdout.decode('utf-8'))
> self.assertIn('site', modules)
>
> + # http://bugs.python.org/issue19205
> re_mods = {'re', '_sre', 'sre_compile', 'sre_constants',
'sre_parse'}
> self.assertFalse(modules.intersection(re_mods))
> -
> + # http://bugs.python.org/issue9548
> self.assertNotIn('locale', modules)
This looks like it snuck in from a separate patch.
Cheers,
Nick.
> + # http://bugs.python.org/issue19209
> + self.assertNotIn('copyreg', modules)
>
>
> if __name__ == "__main__":
> diff --git a/Misc/NEWS b/Misc/NEWS
> --- a/Misc/NEWS
> +++ b/Misc/NEWS
> @@ -36,6 +36,10 @@
> Library
> -------
>
> +- Issue #19209: Remove import of copyreg from the os module to speed up
> + interpreter startup. stat_result and statvfs_result are now hard-coded
to
> + reside in the os module.
> +
> - Issue #19205: Don't import the 're' module in site and sysconfig
module to
> to speed up interpreter start.
>
> diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c
> --- a/Modules/posixmodule.c
> +++ b/Modules/posixmodule.c
> @@ -11974,7 +11974,7 @@
> return NULL;
> #endif
>
> - stat_result_desc.name = MODNAME ".stat_result";
> + stat_result_desc.name = "os.stat_result"; /* see issue #19209 */
> stat_result_desc.fields[7].name = PyStructSequence_UnnamedField;
> stat_result_desc.fields[8].name = PyStructSequence_UnnamedField;
> stat_result_desc.fields[9].name = PyStructSequence_UnnamedField;
> @@ -11983,7 +11983,7 @@
> structseq_new = StatResultType.tp_new;
> StatResultType.tp_new = statresult_new;
>
> - statvfs_result_desc.name = MODNAME ".statvfs_result";
> + statvfs_result_desc.name = "os.statvfs_result"; /* see issue
#19209 */
> if (PyStructSequence_InitType2(&StatVFSResultType,
> &statvfs_result_desc) < 0)
> return NULL;
>
> --
> Repository URL: http://hg.python.org/cpython
>
> _______________________________________________
> Python-checkins mailing list
> Python-checkins at python.org
> https://mail.python.org/mailman/listinfo/python-checkins
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-dev/attachments/20131012/22ce0ce1/attachment.html>
More information about the Python-Dev
mailing list