Unpickling problem in python under apache (mod_python)
I'm writing a web application that talks over network socket to a server that I develop in python. To simplify things I decided to pack the data into a class and transfer it after pickling.
To test the concept I've written a code that pickles the class and unpickles it but it doesn't work. Same code runs in python interpreter. Below is the code and the error I get:
class testClass:
def __init__(self):
self.blah = 'bleh'
self.meaning = 42
self.isComplete = False
def dumpy(self):
print self.blah
print self.meaning
print self.isComplete
def index():
foo = testClass()
p_foo = pickle.dumps(foo)
foo = pickle.loads(p_foo)
foo.dumpy()
This is the error:
ImportError: No module named _mp_11b334e84556201b42d59ca560e0f6ad
MODULE CACHE DETAILS
Accessed: Fri May 20 16:23:51
2011 Generation: 0_mp_11b334e84556201b42d59ca560e0f6ad {
FileName: '/var/www/stormstation-web/sea_monitor/management_client.py' Instance: 1 [IMPORT] Generation: 1 Modified: Fri May 20 16:23:47 2011 Imported: Fri May 2开发者_如何学Go0 16:23:51 2011 }
Yes, this is the case.
You cannot easily use pickled classes, functions or class instances with mod_python.
This document describes the problem from the point of view of Sessions, but still applies to your usage: http://www.dscpl.com.au/wiki/ModPython/Articles/IssuesWithSessionObjects
Basic problem:
The source of the problems and limitations is how the operation of the "pickle" serialisation routine is affected by the module reloading mechanism implemented by mod_python. That is, the module loading mechanism as underlies the Python*Handler directives and as implemented by the apache.import_module() function. The particular types of data which are known to be affected are function objects and class objects.
Summarising:
In order to ensure that no strange problems at all are likely to occur, it is suggested that only basic builtin Python types, ie., scalars, tuples, lists and dictionaries, be stored in session objects. That is, avoid any type of object which has user defined code associated with it.
精彩评论