<div dir="ltr">made some more simple test cases (pickling Test1() and Test2() fails):<div><br></div><div>#-------------------------------------------------------------</div><div><div>import pickle</div><div><br></div><div>
def func(): pass</div><div><br></div><div>class Test0(object):</div><div>    def __init__(self):</div><div>        self.func = func</div><div><br></div><div>class Test1(object):</div><div>    def __init__(self):</div><div>
        self.func = lambda s: 0</div><div><br></div><div>class Test2(object):</div><div>    def __init__(self):</div><div>        self.func = self.func2</div><div>    def func2(self):</div><div>        pass</div><div>        </div>
<div>        </div><div>if __name__ == '__main__':</div><div>    </div><div>    s = pickle.dumps(Test0())</div><div>    t = pickle.loads(s)</div><div>    s = pickle.dumps(Test1()) #ERROR</div><div>    t = pickle.loads(s)</div>
<div>    s = pickle.dumps(Test2()) #ERROR</div><div>    t = pickle.loads(s)</div><div>    print 'done'</div></div><div><div>#-------------------------------------------------------------</div><div></div></div><div>
<br></div><div>all succeed in e.g. Idle.</div><div><br></div><div>Cheers, Lars</div><div><br></div></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Thu, Oct 24, 2013 at 4:52 PM, Kristján Valur Jónsson <span dir="ltr"><<a href="mailto:kristjan@ccpgames.com" target="_blank">kristjan@ccpgames.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="im"><br>
> -----Original Message-----<br>
> From: <a href="mailto:stackless-bounces@stackless.com">stackless-bounces@stackless.com</a> [mailto:<a href="mailto:stackless-">stackless-</a><br>
</div><div class="im">> <a href="mailto:bounces@stackless.com">bounces@stackless.com</a>] On Behalf Of John Ehresman<br>
> Sent: 23. október 2013 15:06<br>
> To: <a href="mailto:stackless@stackless.com">stackless@stackless.com</a><br>
> Subject: Re: [Stackless] Fwd: deepcopying (pickling) channels<br>
><br>
</div><div class="im">> It does look like the __init__ saves a reference of self.func2 in self.func -- is<br>
> this what triggers the pickling of globals?<br>
<br>
</div>Yes.  It is trying to pickle a bound function.<br>
But it is not pickling "globals".  save_global() means that it is trying to save an object by name.  It came across wingdb_import_hook during the process, and this function is not found where it says it is found.<br>

Now, where did it find the function?  We don't know.<br>
If you change pickle.py we might have a better idea.<br>
<br>
How about this:<br>
<br>
def save(self, obj):<br>
  try:<br>
    return self._save(obj)<br>
  except PickleError:<br>
    print "pickling obj: %r", obj<br>
    raise<br>
<br>
def _save(self, obj):<br>
  ... #rename old save to _save.<br>
<br>
<br>
This should give us more info.<br>
<div class="HOEnZb"><div class="h5"><br>
K<br>
<br>
<br>
_______________________________________________<br>
Stackless mailing list<br>
<a href="mailto:Stackless@stackless.com">Stackless@stackless.com</a><br>
<a href="http://www.stackless.com/mailman/listinfo/stackless" target="_blank">http://www.stackless.com/mailman/listinfo/stackless</a><br>
</div></div></blockquote></div><br><br clear="all"><div><br></div>-- <br>====================================<br>Lars van Gemerden<br><a href="mailto:lars@rational-it.com">lars@rational-it.com</a><br>+31 6 26 88 55 39<br>
====================================
</div>