On 12 Oct 2013 09:27, "christian.heimes" <python-check...@python.org> wrote: > > http://hg.python.org/cpython/rev/29c4a6a11e76 > changeset: 86216:29c4a6a11e76 > user: Christian Heimes <christ...@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-check...@python.org > https://mail.python.org/mailman/listinfo/python-checkins >
_______________________________________________ Python-Dev mailing list Python-Dev@python.org https://mail.python.org/mailman/listinfo/python-dev Unsubscribe: https://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com