[Yt-svn] yt-commit r1087 - in trunk/yt: fido lagos

mturk at wrangler.dreamhost.com mturk at wrangler.dreamhost.com
Wed Jan 7 19:24:08 PST 2009


Author: mturk
Date: Wed Jan  7 19:24:08 2009
New Revision: 1087
URL: http://yt.spacepope.org/changeset/1087

Log:
If running in parallel, turn off the option that saves parameter files in a
persistent store.  This should only be problematic if you -- while running in
parallel -- open up a saved / pickled object whose parameter file has not
already been opened during the YT session.



Modified:
   trunk/yt/fido/ParameterFileStorage.py
   trunk/yt/lagos/ParallelTools.py

Modified: trunk/yt/fido/ParameterFileStorage.py
==============================================================================
--- trunk/yt/fido/ParameterFileStorage.py	(original)
+++ trunk/yt/fido/ParameterFileStorage.py	Wed Jan  7 19:24:08 2009
@@ -35,7 +35,7 @@
 class ParameterFileStore(object):
 
     _shared_state = {}
-    _shelve = None
+    _shelf = None
 
     def __new__(cls, *p, **k):
         self = object.__new__(cls, *p, **k)
@@ -43,11 +43,12 @@
         return self
 
     def __init__(self, in_memory = False):
+        self._do_shelve = ytcfg.getboolean("yt", "StoreParameterFiles")
         only_on_root(self.__init_shelf)
 
     def _get_db_name(self):
         if not os.access(os.path.expanduser("~/"), os.W_OK):
-            return "parameter_files.db"
+            return os.path.abspath("parameter_files.db")
         return os.path.expanduser("~/.yt/parameter_files.db")
 
     def wipe_hash(self, hash):
@@ -90,22 +91,33 @@
             self.wipe_hash(pf._hash())
             self.insert_pf(pf)
 
+    def __read_only(self):
+        if self._shelf is not None: return self._shelf
+        return shelve.open(self._get_db_name(), flag='r', protocol=-1)
+
+    def __read_write(self):
+        if self._shelf is not None: return self._shelf
+        return shelve.open(self._get_db_name(), flag='c', protocol=-1)
+
     def insert_pf(self, pf):
         self[pf._hash()] = self._adapt_pf(pf)
 
     def __getitem__(self, key):
-        my_shelf = shelve.open(self._get_db_name(), flag='r', protocol=-1)
+        my_shelf = self.__read_only()
         return my_shelf[key]
 
     def __store_item(self, key, val):
-        my_shelf = shelve.open(self._get_db_name(), 'c', protocol=-1)
+        my_shelf = self.__read_write()
         my_shelf[key] = val
 
     def __delete_item(self, key):
-        my_shelf = shelve.open(self._get_db_name(), 'c', protocol=-1)
+        my_shelf = self.__read_write()
         del my_shelf[key]
 
     def __init_shelf(self):
+        if not ytcfg.getboolean("yt", "StoreParameterFiles"):
+            self._shelf = defaultdict(lambda: dict(bn='',fp='',tt='',ctid=''))
+            return
         dbn = self._get_db_name()
         dbdir = os.path.dirname(dbn)
         try:

Modified: trunk/yt/lagos/ParallelTools.py
==============================================================================
--- trunk/yt/lagos/ParallelTools.py	(original)
+++ trunk/yt/lagos/ParallelTools.py	Wed Jan  7 19:24:08 2009
@@ -38,6 +38,7 @@
         ytcfg["yt","__parallel_rank"] = str(MPI.COMM_WORLD.rank)
         ytcfg["yt","__parallel_size"] = str(MPI.COMM_WORLD.size)
         ytcfg["yt","__parallel"] = "True"
+        ytcfg["yt","StoreParameterFiles"] = "True"
         # Now let's make sure we have the right options set.
         if MPI.COMM_WORLD.rank > 0:
             if ytcfg.getboolean("lagos","serialize"):



More information about the yt-svn mailing list