Hi Lars,
you are observing well known deficiencies of the pickle/cPickle
implementation of Python. Perhaps sPickle
(http://pypi.python.org/pypi/sPickle) can pickle the channels.
Regards
Anselm
Am 06.10.2013 08:58, schrieb lars van Gemerden:
maybe double but i got a mail bounce ..
---------- Forwarded message ----------
From: lars van Gemerden <[email protected]>
Date: Thu, Oct 3, 2013 at 6:15 PM
Subject: Re: [Stackless] deepcopying (pickling) channels
To: The Stackless Python Mailing List <[email protected]>
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 <[email protected]> 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
[email protected]
http://www.stackless.com/mailman/listinfo/stackless
maybe double but i got a mail bounce ..
---------- Forwarded message ----------
From: *lars van Gemerden* <[email protected]
<mailto:[email protected]>>
Date: Thu, Oct 3, 2013 at 6:15 PM
Subject: Re: [Stackless] deepcopying (pickling) channels
To: The Stackless Python Mailing List <[email protected]
<mailto:[email protected]>>
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 <[email protected]
<mailto:[email protected]>> 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
[email protected] <mailto:[email protected]>
http://www.stackless.com/mailman/listinfo/stackless
--
====================================
Lars van Gemerden
[email protected] <mailto:[email protected]>
+31 6 26 88 55 39 <tel:%2B31%206%2026%2088%2055%2039>
====================================
--
====================================
Lars van Gemerden
[email protected] <mailto:[email protected]>
+31 6 26 88 55 39
====================================
_______________________________________________
Stackless mailing list
[email protected]
http://www.stackless.com/mailman/listinfo/stackless
--
Dipl. Phys. Anselm Kruis science + computing ag
Senior Solution Architect Ingolstädter Str. 22
email [email protected] 80807 München, Germany
phone +49 89 356386 874 fax 737 www.science-computing.de
--
Vorstandsvorsitzender/Chairman of the board of management:
Gerd-Lothar Leonhart
Vorstand/Board of Management:
Dr. Bernd Finkbeiner, Michael Heinrichs,
Dr. Arno Steitz, Dr. Ingrid Zech
Vorsitzender des Aufsichtsrats/
Chairman of the Supervisory Board:
Philippe Miltin
Sitz/Registered Office: Tuebingen
Registergericht/Registration Court: Stuttgart
Registernummer/Commercial Register No.: HRB 382196
_______________________________________________
Stackless mailing list
[email protected]
http://www.stackless.com/mailman/listinfo/stackless