[openstack-dev] [all][python3] use of six.iteritems()

Jay Pipes jaypipes at gmail.com
Tue Sep 13 23:31:13 UTC 2016


On 09/13/2016 01:40 PM, Terry Wilson wrote:
> On Thu, Jun 11, 2015 at 8:33 AM, Sean Dague <sean at dague.net> wrote:
>> On 06/11/2015 09:02 AM, Jay Pipes wrote:
>>> On 06/11/2015 01:16 AM, Robert Collins wrote:
>>>> But again - where in OpenStack does this matter the slightest?
>>>
>>> Precisely. I can't think of a single case where we are iterating over
>>> anywhere near the number of dictionary items that we would see any
>>> impact whatsoever.
>
> In neutron, the ovsdb native code iterates over fairly large
> dictionaries since the underlying OVS library stores OVSDB tables
> completely in memory as dicts. I just looked at the code I wrote and
> it currently uses values() and I now want to switch it to
> six.itervalues() :p.
>
>>> Best,
>>> -jay
>>
>> +1.
>>
>> This is a massive premature optimization which just makes all the code
>> gorpy for no real reason.
>
> Premature optimization is about wasting a bunch of time trying to
> optimize code before you know you need to, not about following the
> accepted almost-always-faster/always-less-memory-using solution that
> already exists. Memory-wise it's the difference between a constant
> 88-byte iterator and the storage for an additional list of tuples. And
> if Raymond Hettinger, in a talk called "Transforming Code Into
> Beautiful Idiomatic Python" specifically mentions that people should
> always use iteritems
> (https://www.youtube.com/watch?v=OSGv2VnC0go&feature=youtu.be&t=21m24s),
> I tend to believe him. Sure, it'd be much better if Python 3 and
> Python 2 both returned iterators for items(), values(), keys(), etc.,
> but it doesn't. Wasting memory for purely aesthetic reasons (they're
> even both the same number of lines) is just a bad idea, IMNSHO.

Is it wasted time to respond to a mailing list post from 18 months ago?

-jay



More information about the OpenStack-dev mailing list