When loading vdb_metadata.pickle inside vardbapi._aux_cache_init(), in
authorZac Medico <zmedico@gentoo.org>
Wed, 11 Mar 2009 06:01:59 +0000 (06:01 -0000)
committerZac Medico <zmedico@gentoo.org>
Wed, 11 Mar 2009 06:01:59 +0000 (06:01 -0000)
order to avoid an extreme performance issue, disable buffering when opening
the file under python-3.0. Unfortunately, performance is still poor relative
to python-2.x, but buffering makes it much worse. (trunk r12665)

svn path=/main/branches/2.1.6/; revision=12928

pym/portage/dbapi/vartree.py

index 3c8ece366eef9adb5d7e4697bd1a261f940c529c..f65afb6bdc0e14922f7a0d818eff55af1b19dcd1 100644 (file)
@@ -35,6 +35,7 @@ from portage.cache.mappings import slot_dict_class
 import os, re, shutil, stat, errno, copy, subprocess
 import logging
 import shlex
+import sys
 from itertools import izip
 
 try:
@@ -389,8 +390,15 @@ class vardbapi(dbapi):
 
        def _aux_cache_init(self):
                aux_cache = None
+               open_kwargs = {}
+               if sys.hexversion >= 0x3000000:
+                       # Buffered io triggers extreme performance issues in
+                       # Unpickler.load() (problem observed with python-3.0.1).
+                       # Unfortunately, performance is still poor relative to
+                       # python-2.x, but buffering makes it much worse.
+                       open_kwargs["buffering"] = 0
                try:
-                       f = open(self._aux_cache_filename, 'rb')
+                       f = open(self._aux_cache_filename, mode='rb', **open_kwargs)
                        mypickle = pickle.Unpickler(f)
                        aux_cache = mypickle.load()
                        f.close()