fast QListView numerical sort

Uwe Mayer merkosh at hadiko.de
Thu Feb 12 16:06:38 EST 2004


Andy Salnikov wrote:
>> The compare method returns < 0 for "smaller", 0 for "equal", > 0 for
>> "bigger".
>> Doing so works, but causes a 2 sec delay each time a re-sort has to be
> done
>> - which is rather annoying (at only less than 1/3 of its expected load!)

> Well, this probably comes from PyQt's nature - its a layer between Qt
> (which is C++)
> and Python. QListView calls some C++ function to sort its items, which in
> turn makes
> a lot of calls to QListViewItem::compare(). Every call to compare() has to
> be
> translated from C++ world to Python world, and the result returned back.

Yes. I found another suggestion on the web: overwriting the .key() method,
which has to return the value that is to be compared during sorting.
The .key() method returns a left zero-padded string and thus the string
sorting will yield the correct results.
However, this is even slower than overwriting the .compare() method.
 
>> Solutions I could come up with are:
>> a. derive a C++ QListViewItem that does the numerical sorting and use
>> this instead of the default QListViewItem in the hope it'll be faster
>> pro: probably the easyest (faster? fast enough?)
>> con: not portable

> That should be fast enough, I guess, this is the ultimate speed you can
> get.
> Why isn't it portable?

... yeah, it surely will run on Windows, but then I'll have to take care of
the cross-compilation, etc. Which Windows user has a C++ compiler
installed?
Portability is surely my (personally) least problem, but working with Python
its not nice giving up this "portability" feature: take the sources to
another platform - run.

Another possibility: Have you got any experience with Psyco? I just heard
about it, but didn't go into much details until now. Perhaps the
just-in-time compiler will boost the performance...

Thanks
Uwe



More information about the Python-list mailing list