GATOR AIDE
gator_aide2000 at yahoo.com
Tue Oct 4 02:17:56 EDT 2005
Actually, the same exact code works using mod_python version 3.1.4. I only get get the error when I run the code using the latest version of mod_python (3.2.2b). I guess I can work around the problem by storing strings or something, but it seems odd that I only get the error with the newest version. Sorry if that wasn't clear in the original post. Thanks for all of the feedback. Mike --- Nicolas Lehuen <nicolas.lehuen at gmail.com> wrote: > Graham, > > Mr Gator Aide had the same problem with mod_python > 3.1.4, though the message > was a bit different. The point is that he is trying > to store too much in the > session and that he should work around that. The new > import mechanism may > make things a little more difficult, but the core > problem is in the way he > uses sessions, not in mod_python. > > Regards, > Nicolas > > 2005/10/4, Graham Dumpleton <grahamd at dscpl.com.au>: > > > > GATOR AIDE wrote .. > > > After updating mod_python 3.1.4 to 3.2.2b I am > getting > > > an error: > > > > > > PythonHandler mod_python.publisher: TypeError: > can't > > > pickle function objects > > > > > > I am storing a function in the session and > calling > > > session.save(). (Which is when the error is > raised.) > > > > > > Using mod_python 3.1.4 the code works just fine > but > > > after the update I am now seeing this error. > > > > > > The code simply stores a dictionary and few > function > > > callbacks in the session and loops through > several > > > functions until it is done processing. > > > > > > Not sure if anyone else has had this problem? I > > > running centos 2.4.21-27.0.4.ELsmp on a x86_64 > > > platform. Python 2.4.2 (same error w/2.4.1). > Apache > > > 2.0.46. > > > > > > I wasn't sure if this is the right place to post > this, > > > so I apologize if I should have posted the > question > > > elsewhere. > > > > I am going to hazard a guess and say that pickle > probably only allows > > you to pickle a function objects where the > function object resides in a > > module which was imported using "import", ie., > lives in " sys.modules". > > > > In mod_python 3.2, mod_python.publisher handler > modules are no longer > > imported using the Python "import" mechanism but > are instead read in as > > strings and executed against a dictionary of an > empty module which does > > not actually exist in sys.modules. > > > > def build(self, key, name, opened, entry): > > try: > > module = new.module(re_not_word.sub('_',key)) > > module.__file__ = key > > exec opened in module.__dict__ > > return module > > finally: > > opened.close() > > > > The error would seem reasonable under these > circumstances because if it > > were pickled, it wouldn't perhaps be unable to > unpickle it later as it > > wouldn't know the name of a module in > "sys.modules" to associate the > > function reference to. > > > > Are you sure you can't use a string reference or > something else as a > > handle > > to refer to the callback function rather than an > actual function object? > > > > Graham > > _______________________________________________ > > Mod_python mailing list > > Mod_python at modpython.org > > > http://mailman.modpython.org/mailman/listinfo/mod_python > > > __________________________________ Yahoo! Mail - PC Magazine Editors' Choice 2005 http://mail.yahoo.com
|