[pypy-dev] how can i pickle an application-level object from interpreter code?
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:
> 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
> > 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
> > this program:
> > import foo
> > x = foo.ComplicatedObject()
> > right after the interpreter creates an instance of
> > 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
> > It seems like an instance object is represented within the interpreter as
> > type "class W_InstanceObject(Wrappable)", and I can't directly pickle
> > 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
> 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
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the Pypy-dev