Which uses less memory?
Nick Craig-Wood
nick at craig-wood.com
Sat Nov 17 17:30:04 EST 2007
bret.wortman at gmail.com <bret.wortman at gmail.com> wrote:
> I'm not sure if this is as easy a question as I'd like it to be, but
> here goes....
>
> I'm working on an application that is very memory intensive, so we're
> trying to reduce the memory footprint of classes wherever possible. I
> have a need for a class which is able to have a type identifier which
> can be examined at run-time to determine whether that class (called
> Domain) contains data I care about or not.
>
> I've thought of two ways to implement this:
>
> 1. Add a type attribute and set it to a descriptive string.
> 2. Create marker classes and use multiple inheritance to "attach"
> these markers to specific Domains.
>
> Here's the kicker: I need to serialize these Domains and send them to/
> from Java code as well as work on them using Python. We're looking to
> use Hessian and pyactivemq to handle the Java/Python interfaces.
> Which, I guess, leads to the following group of questions:
>
> 1. Which method has the smaller footprint within the Python engine?
> 2. Do these protocols (Hessian and Stomp) preserve the class
> information when the class is serialized?
>
> Any input would be most welcome. Thanks!
I don't know the answers to your specific questions but we managed to
1/3 the memory requirement of our app by identifying the class having
the most instances (about 1,000,000 in our case) and adding __slots__
to it!
I'd guess that if you __slot__-ed the Domain class then you'll find
the overhead of a type attribute is minimal (4 bytes per instance I
think).
No idea about Hessian or Stomp (never heard of them!) but classes with
__slot__s are normal classes which would pickle or unpickle.
--
Nick Craig-Wood <nick at craig-wood.com> -- http://www.craig-wood.com/nick
More information about the Python-list
mailing list