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