[Stackless] Fwd: deepcopying (pickling) channels

lars van Gemerden lars at rational-it.com
Sun Oct 6 08:58:20 CEST 2013


maybe double but i got a mail bounce ..

---------- Forwarded message ----------
From: lars van Gemerden <lars at rational-it.com>
Date: Thu, Oct 3, 2013 at 6:15 PM
Subject: Re: [Stackless] deepcopying (pickling) channels
To: The Stackless Python Mailing List <stackless at stackless.com>


actually both give an error. The only thing different is the error message.
with pickle the code would be:

---------------------------------------------------------------------------
import stackless, pickle

class Test(object):
    def __init__(self):
        self.channel = stackless.channel()

    def run(self):
        stackless.tasklet(self.sender)()
        stackless.tasklet(self.receiver)()
        stackless.run()

    def sender(self):
        counter = 0
        while counter < 10:
            self.channel.send(counter)
            counter += 1

    def receiver(self):
        counter = 0
        while counter < 12:
            counter = self.channel.receive()
            print counter,
        print "done"

if __name__ == "__main__":

    t = Test()
    t.run()
    t.channel = None
    s = pickle.dumps(t) #OK

    t = Test()
    t.run()
    s = pickle.dumps(t) #ERROR
-----------------------------------------------------------------------------
and the error:

pickle.PicklingError: Can't pickle <type 'function'>: it's not found as
__builtin__.function

otherwise the error behavior is the same as decribed above.

Cheers, Lars

(as far as i have read and tested a bit, deepcopy allows more to be copied
then pickle, but cPickle is faster, so i have my own deepcopy:

def deepcopy(obj):
    try:
        return cPickle.loads(cPickle.dumps(obj, -1))
    except PicklingError:
        return copy.deepcopy(obj)
)


On Thu, Oct 3, 2013 at 5:19 AM, Richard Tew <richard.m.tew at gmail.com> wrote:

> I'm a little confused.  Are you pickling the tasklets, or copying
> them?  These are different things to Python.
>
> As far as I know using copy or deepcopy has never been supported for
> tasklets and therefore channels.
>
> Pickling however, is another matter.
>
> Cheers,
> Richard.
>
> _______________________________________________
> Stackless mailing list
> Stackless at stackless.com
> http://www.stackless.com/mailman/listinfo/stackless
>



-- 
====================================
Lars van Gemerden
lars at rational-it.com
+31 6 26 88 55 39
====================================



-- 
====================================
Lars van Gemerden
lars at rational-it.com
+31 6 26 88 55 39
====================================
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.stackless.com/pipermail/stackless/attachments/20131006/d1bcc308/attachment.html>


More information about the Stackless mailing list