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