[python] Parsování emailu

Jakub Vojácek jakohv na seznam.cz
Úterý Duben 29 18:38:09 CEST 2008


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
------------- dal¹í èást ---------------
HTML p?íloha byla odstran?na...
URL: http://www.py.cz/pipermail/python/attachments/20080429/1c09ac21/attachment.htm 


Další informace o konferenci Python