From: Zac Medico Date: Wed, 11 Mar 2009 06:01:59 +0000 (-0000) Subject: When loading vdb_metadata.pickle inside vardbapi._aux_cache_init(), in X-Git-Tag: v2.1.6.8~149 X-Git-Url: http://git.tremily.us/?a=commitdiff_plain;h=09621d445e87c102869e5c97898fda55c217d643;p=portage.git When loading vdb_metadata.pickle inside vardbapi._aux_cache_init(), in 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 --- diff --git a/pym/portage/dbapi/vartree.py b/pym/portage/dbapi/vartree.py index 3c8ece366..f65afb6bd 100644 --- a/pym/portage/dbapi/vartree.py +++ b/pym/portage/dbapi/vartree.py @@ -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()