On 2017-10-20 18:19, Israel Brewster wrote:
tldr: I have an object that can't be picked. Is there any way to do a "raw" 
dump of the binary data to a file, and re-load it later?

Details: I am using a java (I know, I know - this is a python list. I'm not asking 
about the java - honest!) library (Jasper Reports) that I access from python using 
py4j (www.py4j.org <http://www.py4j.org/>). At one point in my code I call a 
java function which, after churning on some data in a database, returns an object (a 
jasper report object populated with the final report data) that I can use (via 
another java call) to display the results in a variety of formats (HTML, PDF, XLS, 
etc). At the time I get the object back, I use it to display the results in HTML 
format for quick display, but the user may or may not also want to get a PDF copy in 
the near future.

Since it can take some time to generate this object, and also since the data 
may change between when I do the HTML display and when the user requests a PDF 
(if they do at all), I would like to save this object for potential future 
re-use. Because it might be large, and there is actually a fairly good chance 
the user won't need it again, I'd like to save it in a temp file (tat would be 
deleted when the user logs out) rather than in memory. Unfortunately, since 
this is an object created by and returned from a java function, not a native 
python object, it is not able to be pickled (as the suggestion typically is), 
at least to my knowledge.

Given that, is there any way I can write out the "raw" binary data to a file, 
and read it back in later? Or some other way to be able to save this object? It is 
theoretically possible that I could do it on the java side, i.e. the library may have 
some way of writing out the file, but obviously I wouldn't expect anyone here to know 
anything about that - I'm just asking about the python side :-)

As far as I can tell, what you're getting is a Python object that's a proxy to the actual Java object in the Java Virtual Machine. The Python side might be taking to the Java side via a socket or a pipe, and not know anything about, or have access to, the internals of the Java object.

In fact, you can't even be sure how a particular Python object is laid out in memory without reading the source code.
--
https://mail.python.org/mailman/listinfo/python-list

Reply via email to