[mod_python] All spawned threads in Restricted Exection Mode

Alan Davies alan at goatpunch.com
Sun Apr 10 16:20:52 EDT 2005


If you don't need the features of Python 2.4, you could try going back
to Python 2.3.4 (not 2.3.5), which is how I have avoided the problem
for now.

--Alan

On Sat, 9 Apr 2005 14:06:02 -0700, "Mike Solomon" <mike at mrlventures.com>
said:
> 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)
> 


More information about the Mod_python mailing list