Ahoj

Opet se na vás obracím s nekterými mými problémy. Tentokrát se jedná o takovou 
spíse teoretickou otázku. Jiz mám naprogramovaného "relativne" fungujícího 
postovního klienta (prijímání, psaní mailu, pravidla pro zprávy, skupiny, 
kontakty, rss ctecka apod...). Pokud pracuji s databází, která obsahuje 100 
e-mailu, zádný problém nenastane, ale jelikoz e-maily nemazu, tak je pocet 
e-mailu o neco vyssí (pres 4000). A v tom je práve ten problém. Pokud mám 
napríklad slozku, ve které je 500 e-mailu, tak se nacítá asi 5 sekund. V jiných 
aplikacích (Outlook Express je tato doba 10 kratsí). A moje otázka je: Jak by 
se tato doba dala zkrátit?
Jako knihovnu pro tvorbu Gui pouzívám WxPython a jako databázi, kam ukládám 
e-maily pouzívám modul shelve. E-maily ukládám následovne:

def prijmi_email(self):
    email = pop.retr(x)
    email = "\n".join(email[1])
    kategorie = 0
    precteno = 0
    self.uloz_db(kategorie, [email, precteno])
def uloz_db(self, kategorie, email):
    s=shelve.open("Db/%s.db"%kategorie)
    id=s["id"]
    s[str(id)] = email
    s["id"] = id +1
    s.close()
    return id

Kazdý e-mail (v rámci jedné slozky) má tedy svoje vlastní unikátní id. Nacítání 
funguje následujícím zpusobem:

def nacti_emaily(self, kategorie=0, strana = 0):
        self.listbox.DeleteAllItems()
        s=shelve.open("Db/%s.db"%kategorie)
        rozsah= []
        for x in range(strana*100, strana*100 + 100):
            rozsah.append(str(x))
        for prvek in s:
            if prvek == "id": continue
            if prvek in rozhrani:
                self.pridej_zaznam(s[prvek][0], prvek, precteny=s[prvek][1])
        s.close()

Aby nacítání trvalo alespon o trochu méne, rozhodl jsem zavést stránkování (na 
jedné strane pouze 100 mailu), ale moc jsem si nepomohl, protze stejne musím 
procházet vsemi e-maily a zobrazovat pouze ty z daného rozsahu. Ve funkci 
pridej_zaznam jeste musím získat odesílatele, predmet a cas prijetí, coz zabere 
taky relativne dost casu. 
Jak by se dal celý postup zefektivnit?

Dekuji za kazdou odpoved

Jakub Vojácek
_______________________________________________
Python mailing list
[email protected]
http://www.py.cz/mailman/listinfo/python

Odpovedet emailem