Hey Vincent,<div><br></div><div>Thanks for the detailed reply! That really clears things up.</div><div><br></div><div><span style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.800000190734863px;background-color:rgb(255,255,255)">> > - Are there any other caching options?</span><br style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.800000190734863px;background-color:rgb(255,255,255)">
<span style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.800000190734863px;background-color:rgb(255,255,255)">> The option to make pickle cache persistent comes to mind. There may be others, </span></div>
<div><span style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.800000190734863px;background-color:rgb(255,255,255)">> I don't recall right now.</span></div><div><span style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.800000190734863px;background-color:rgb(255,255,255)"><br>
</span></div><div><font color="#222222" face="arial, sans-serif">This seems like a good idea - I would like for the server to maintain its cache when I restart it (which is fairly often as I'm always working on it). However, I seem to have run into some problems. I tried this uri (added newlines for ease of reading):</font></div>
<div><font color="#222222" face="arial, sans-serif"><br></font></div><div><font color="#222222" size="1" face="courier new, monospace">zeo://%(here)s/zeo.sock?</font></div><div><font color="#222222" size="1" face="courier new, monospace"> cache_size=2000MB&</font></div>
<div><font color="#222222" size="1" face="courier new, monospace"> connection_cache_size=500000&</font></div><div><font color="#222222" size="1" face="courier new, monospace"> connection_pool_size=15&</font></div>
<div><font color="#222222" size="1" face="courier new, monospace"> var=zeocache&</font></div><div><font color="#222222" size="1" face="courier new, monospace"> client=main</font></div><div><font color="#222222" size="1" face="courier new, monospace"><br>
</font></div><div><span style="color:rgb(34,34,34);font-family:arial,sans-serif">Yet I get a "</span><font color="#222222" face="arial, sans-serif">zc.lockfile.LockError: Couldn't lock 'zeocache/main-1.zec.lock'</font><span style="color:rgb(34,34,34);font-family:arial,sans-serif">" error. I've tried googling it and it seems like this happens if multiple processes attempt to access the same database if one isn't using ZEO, but I am using ZEO and this is only related to the cache. I'm using paster to serve the app and I don't think it creates multiple processes. Why might this be happening? Here is my `app` function that paster uses to get the wsgi app along with all relevant code:</span></div>
<div><span style="color:rgb(34,34,34);font-family:arial,sans-serif"><br></span></div><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><div><div><font color="#222222" size="1" face="courier new, monospace">import logging</font></div>
</div><div><div><font color="#222222" size="1" face="courier new, monospace">import time</font></div></div><div><div><font color="#222222" size="1" face="courier new, monospace">import threading</font></div></div><div><div>
<font color="#222222" size="1" face="courier new, monospace"><br></font></div></div><div><div><font color="#222222" size="1" face="courier new, monospace">from repoze.bfg.configuration import Configurator</font></div></div>
<div><div><font color="#222222" size="1" face="courier new, monospace">from repoze.zodbconn.finder import PersistentApplicationFinder</font></div></div><div><div><font color="#222222" size="1" face="courier new, monospace"><br>
</font></div></div><div><div><font color="#222222" size="1" face="courier new, monospace">from util.pyshell import in_shell</font></div></div><div><div><font color="#222222" size="1" face="courier new, monospace"><br></font></div>
</div><div><div><font color="#222222" size="1" face="courier new, monospace">from mainapp.models import appmaker</font></div></div><div><div><span style="color:rgb(34,34,34);font-family:'courier new',monospace;font-size:x-small">from mainapp import server_threads</span></div>
</div><div><div><font color="#222222" size="1" face="courier new, monospace"><br></font></div></div><div><div><font color="#222222" size="1" face="courier new, monospace">def check_start_threads():</font></div></div><div>
<div><font color="#222222" size="1" face="courier new, monospace"> time.sleep(5)</font></div></div><div><div><font color="#222222" size="1" face="courier new, monospace"> if not in_shell():</font></div></div><div><div>
<font color="#222222" size="1" face="courier new, monospace"> server_threads.start_server_threads()</font></div></div><div><div><font color="#222222" size="1" face="courier new, monospace"><br></font></div></div><div>
<div><font color="#222222" size="1" face="courier new, monospace">def app(global_config, **settings):</font></div></div><div><div><font color="#222222" size="1" face="courier new, monospace"> logging.basicConfig()</font></div>
</div><div><div><font color="#222222" size="1" face="courier new, monospace"> </font></div></div><div><div><font color="#222222" size="1" face="courier new, monospace"> zodb_uri = global_config.get('zodb_uri')</font></div>
</div><div><div><font color="#222222" size="1" face="courier new, monospace"> if zodb_uri is None:</font></div></div><div><div><font color="#222222" size="1" face="courier new, monospace"> raise ValueError("No 'zodb_uri' in application configuration.")</font></div>
</div><div><div><font color="#222222" size="1" face="courier new, monospace"><br></font></div></div><div><div><font color="#222222" size="1" face="courier new, monospace"> zcml_file = settings.get('configure_zcml', 'configure.zcml')</font></div>
</div><div><div><font color="#222222" size="1" face="courier new, monospace"><br></font></div></div><div><div><font color="#222222" size="1" face="courier new, monospace"> finder = PersistentApplicationFinder(zodb_uri, appmaker)</font></div>
</div><div><div><font color="#222222" size="1" face="courier new, monospace"> def get_root(request):</font></div></div><div><div><font color="#222222" size="1" face="courier new, monospace"> return finder(request.environ)</font></div>
</div><div><div><font color="#222222" size="1" face="courier new, monospace"> config = Configurator(root_factory=get_root, settings=settings)</font></div></div><div><div><font color="#222222" size="1" face="courier new, monospace"> config.begin()</font></div>
</div><div><div><font color="#222222" size="1" face="courier new, monospace"> config.load_zcml(zcml_file)</font></div></div><div><div><font color="#222222" size="1" face="courier new, monospace"> config.end()</font></div>
</div><div><div><font color="#222222" size="1" face="courier new, monospace"><br></font></div></div><div><div><span style="color:rgb(34,34,34);font-family:'courier new',monospace;font-size:x-small"> th = threading.Thread(target=check_start_threads)</span></div>
</div><div><div><font color="#222222" size="1" face="courier new, monospace"> th.start()</font></div></div><div><div><font color="#222222" size="1" face="courier new, monospace"> </font></div></div><div><div><font color="#222222" size="1" face="courier new, monospace"> return config.make_wsgi_app()</font></div>
</div></blockquote><div><div style="color:rgb(34,34,34);font-family:arial,sans-serif"><br></div></div><div><font color="#222222" face="arial, sans-serif">Seems fairly straightforward, no?</font></div><div><font color="#222222" face="arial, sans-serif"><br>
</font></div><div><span style="color:rgb(34,34,34);font-family:arial,sans-serif">- Claudiu</span></div>