[Stackless] pickling tasklet cframe error (exceptions.ValueError: frame exec function at 00499ba0 is not registered!)

Crispin Wellington retrogradeorbit at gmail.com
Wed Sep 8 11:07:21 CEST 2010


Hi there,

I recently got some errors pickling tasklets that I haven't got before. This
is in version "Python 2.6.4 Stackless 3.1b3 060516". Ignore the strange
pickle.py path, that's a copy of pickle.py that I dropped in to add some
debug to try and find out what is happening. The traceback is:

  File
"/usr/local/stackless/lib/python2.6/site-packages/twisted/internet/base.py",
line 391, in fireEvent
    result = callable(*args, **kwargs)
  File "/export/home/tech/cwellington/yabi/yabi-be-twisted/trunk/server.py",
line 88, in shutdown
    TaskManager.shutdown()
  File
"/export/home/tech/cwellington/yabi/yabi-be-twisted/trunk/TaskManager/__init__.py",
line 23, in shutdown
    tasklets.save(directory=config.config['backend']['tasklets'])
  File
"/export/home/tech/cwellington/yabi/yabi-be-twisted/trunk/TaskManager/Tasklets.py",
line 49, in save
    pickled_task = pickle.dumps(task,1)
  File
"/export/home/tech/cwellington/yabi/yabi-be-twisted/trunk/TaskManager/pickle.py",
line 1403, in dumps
    Pickler(file, protocol).dump(obj)
  File
"/export/home/tech/cwellington/yabi/yabi-be-twisted/trunk/TaskManager/pickle.py",
line 232, in dump
    self.save(obj)
  File
"/export/home/tech/cwellington/yabi/yabi-be-twisted/trunk/TaskManager/pickle.py",
line 340, in save
    self.save_reduce(obj=obj, *rv)
  File
"/export/home/tech/cwellington/yabi/yabi-be-twisted/trunk/TaskManager/pickle.py",
line 428, in save_reduce
    save(state)
  File
"/export/home/tech/cwellington/yabi/yabi-be-twisted/trunk/TaskManager/pickle.py",
line 294, in save
    f(self, obj) # Call unbound method with explicit self
  File
"/export/home/tech/cwellington/yabi/yabi-be-twisted/trunk/TaskManager/pickle.py",
line 571, in save_tuple
    save(element)
  File
"/export/home/tech/cwellington/yabi/yabi-be-twisted/trunk/TaskManager/pickle.py",
line 294, in save
    f(self, obj) # Call unbound method with explicit self
  File
"/export/home/tech/cwellington/yabi/yabi-be-twisted/trunk/TaskManager/pickle.py",
line 609, in save_list
    self._batch_appends(iter(obj))
  File
"/export/home/tech/cwellington/yabi/yabi-be-twisted/trunk/TaskManager/pickle.py",
line 642, in _batch_appends
    save(x)
  File
"/export/home/tech/cwellington/yabi/yabi-be-twisted/trunk/TaskManager/pickle.py",
line 315, in save
    rv = reduce(self.proto)
exceptions.ValueError: frame exec function at 00499ba0 is not registered!

The reduce function its calling from my debug turns out to be: <built-in
method __reduce_ex__ of stackless.cframe object at 0x17d6a050>. (The proto
is 1 btw)

I can keep digging myself, but does anyone have any experience with these
kind of tasklet pickle problems? What is the 'normal' course of action when
pickling a cFrame? What is the 'register' that the exec function needs to be
entered into? Where does this happen? Can someone point me to info on how
stackless pickles a tasklet with a cframe in it? Any help would be
appreciated and I understand that this isn't much info. I'll keep digging!

Kind Regards

Crispin.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.stackless.com/pipermail/stackless/attachments/20100908/ef16ac6b/attachment.html>


More information about the Stackless mailing list