[pypy-dev] how can i pickle an application-level object from interpreter code?

Philip Guo pg at cs.stanford.edu
Sat Oct 3 18:14:37 CEST 2009


On Fri, Oct 2, 2009 at 10:32 AM, Amaury Forgeot d'Arc <amauryfa at gmail.com>wrote:

> Hi,
>
> 2009/10/2 Philip Guo <pg at cs.stanford.edu>:
> > Hi all,
> >
> > I'm brand-new to PyPy, and here is my question: I want to selectively
> pickle
> > Python objects that appear in application-level code, from *within* the
> > interpreter.  e.g., let's say i'm using the PyPy Python interpreter to
> run
> > this program:
> >
> > import foo
> > x = foo.ComplicatedObject()
> >
> > right after the interpreter creates an instance of
> foo.ComplicatedObject(),
> > I want to serialize that instance to disk, in effect simulating this
> > statement:
> >
> > pickle.dump(x, open('data.pickle'))
> >
> > What is the easiest way for me to do this from within the interpreter
> code?
> >
> > It seems like an instance object is represented within the interpreter as
> of
> > type "class W_InstanceObject(Wrappable)", and I can't directly pickle
> that
> > object.  If I could just call the Python standard library's pickle on 'x'
> > from within the interpreter, that would be great.
>
> This should be possible by using gateway.applevel, like the following code.
> Be careful however that pickle.dump is itself a python function which
> creates objects.
> Modifying W_InstanceObject.__init__ this way is probably not a good idea...
>
> Note: I wrote this quickly to get an idea; I did not test at all.
> I took the idea from some other code in
> pypy/module/__builtin__/operation.py
>
> from pypy.interpreter import gateway
>
> dump_object = gateway.applevel(r'''
> def dump_object(x):
>    import pickle
>    pickle.dump(x, open('data.pickle', 'w'))
> ''', filename =__file__).interphook('dump_object')
>
> then you should be able to call it this way:
>    dump_object(space, w_instanceObject)
>


Thanks so much for your quick reply,  Amaury!  This works extremely well.
I'm still trying to wrap my head around app-level vs. interpreter-level,
especially how to serialize data on both levels; your code snippet helped a
lot!

Philip
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/pypy-dev/attachments/20091003/51876f44/attachment.html>


More information about the Pypy-dev mailing list