#157 catlib _getContentsAndSupercats performance issue

closed-fixed
nobody
None
5
2007-12-11
2007-12-04
No

catlib.py's _getContentsAndSupercats method has a performance issue that in
some cases can slow a lot the process of recursiverly downloading all pages
or subcategories of a category.

See this example (chosen just because it's short to report, not because
it's so pathological):

###########ipython output###############
In [1]: import catlib
Checked for running processes. 1 processes currently running, including the
current process.

In [2]: len(catlib.Category('it', 'Categoria:Geometria
descrittiva').articlesList(recurse=True))
Getting [[Categoria:Geometria descrittiva]]...
Getting [[Categoria:Coperture a volta]]...
Getting [[Categoria:Corrispondenza biunivoca (geometria descrittiva)]]...
Getting [[Categoria:Curve piane]]...
Getting [[Categoria:Curve tridimensionali]]...
Getting [[Categoria:Glossario (geometria descrittiva)]]...
Getting [[Categoria:Metodi di rappresentazione]]...
Getting [[Categoria:Modellazione geometrica]]...
Getting [[Categoria:Tassellazioni]]...
Getting [[Categoria:Poliedri]]...
Getting [[Categoria:Tassellazioni]]...
Getting [[Categoria:Problemi di misura]]...
Getting [[Categoria:Stub geometria descrittiva]]...
Getting [[Categoria:Superfici]]...
Getting [[Categoria:Sviluppo di solidi]]...
Getting [[Categoria:Tangenza]]...
Out[2]: 393
###########end ipython output###############

As you can see, [[Categoria:Tassellazioni]] is downloaded 2 times. But I
can grant you that there are a lot of much worse cases.

Anyway, I'm attaching a patch. After the patch, here are the same
commands:

###########ipython output###############
In [1]: import catlib
Checked for running processes. 1 processes currently running, including the
current process.

In [2]: len(catlib.Category('it', 'Categoria:Geometria
descrittiva').articlesList(recurse=True))
Getting [[Categoria:Geometria descrittiva]]...
Getting [[Categoria:Coperture a volta]]...
Getting [[Categoria:Corrispondenza biunivoca (geometria descrittiva)]]...
Getting [[Categoria:Curve piane]]...
Getting [[Categoria:Curve tridimensionali]]...
Getting [[Categoria:Glossario (geometria descrittiva)]]...
Getting [[Categoria:Metodi di rappresentazione]]...
Getting [[Categoria:Modellazione geometrica]]...
Getting [[Categoria:Tassellazioni]]...
Getting [[Categoria:Poliedri]]...
Getting [[Categoria:Problemi di misura]]...
Getting [[Categoria:Stub geometria descrittiva]]...
Getting [[Categoria:Superfici]]...
Getting [[Categoria:Sviluppo di solidi]]...
Getting [[Categoria:Tangenza]]...
Out[2]: 393
###########end ipython output###############

Notice this patch also solves the problem of eventual loops in categories:
catlib won't loop.

Discussion

  • Rotem Liss

    Rotem Liss - 2007-12-09

    Logged In: YES
    user_id=1327030
    Originator: NO

    I changed the patch so that it solves also the problem of duplicate returns, and also does add the subcategory to its cache, and applied it in r4656.

     
  • Anonymous - 2007-12-11
    • status: open --> closed-fixed
     

Get latest updates about Open Source Projects, Conferences and News.

Sign up for the SourceForge newsletter:





No, thanks