On Fri, Oct 2, 2009 at 10:32 AM, Amaury Forgeot d'Arc <[email protected]>wrote:
> Hi, > > 2009/10/2 Philip Guo <[email protected]>: > > 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
_______________________________________________ [email protected] http://codespeak.net/mailman/listinfo/pypy-dev
