|
Mike Solomon
mike at mrlventures.com
Sat Apr 9 17:06:02 EDT 2005
I too see this problem and it's driving me bananas.
I've got Apache 2.0.53, mod_python 3.1.4, python 2.4 installed under
SuSE 9.1. My servlet code and apache config are exactly the same as
Alan's (to minimize potential setup variables.)
My specific problem is that pickling causes this unmarshal error:
(it doesn't seem to matter what i pickle, or if i use cPickle vs pickle)
Traceback (most recent call last):
File "/home/msolomon/test/zclient/client.py", line 10, in
RuntimeError: cannot unmarshal code objects in restricted execution
mode
That line looks like this:
9: obj = None
10: in_a_pickle = pickle.dumps(obj, 2)
Now here is a very strange observation - this exception does not occur
if I put the contents of client.py into threadtest.py - it only happens
when the code is imported.
I'm not sure why threads appear to be executing in restricted mode -
but if that is the problem, I guess I'd like to know how to turn that
off. Despite stumbling onto a few occurrences of this problem, I have
yet to see a solution posted anywhere.
If either of you gentlemen have any additional insight, I would
appreciate it.
------
My servlet looks like this (threadtest.py):
import mod_python
from zclient.client import Client
def handler(req):
c = Client()
req.write(str(c.perform()))
return mod_python.apache.OK
This is zclient/client.py:
import cPickle as pickle
import threading, traceback
class Client:
def thread_op(self, results):
try:
obj = None
in_a_pickle = pickle.dumps(obj, 2)
results.append('ok')
except Exception, e:
results.extend(traceback.format_exc().split('\n'))
def perform(self):
results = []
t = threading.Thread(target=self.thread_op, args=(results,))
t.start()
t.join()
return str(results)
|