[PyAthens] mailbox.mbox is taking too long

George Sakkis george.sakkis at gmail.com
Thu Jul 29 22:04:34 CEST 2010


2010/7/29 Evaggelos Balaskas <ebalaskas at ebalaskas.gr>:

> Καλησπέρα,
>
> ας ελπίσουμε ότι όλοι οι πυθωνίστες δεν έχουν φύγει διακοπές (ακόμα),
> κι ότι θα βρεθεί κάποιος να μου απαντήσει!
>
> Έχω γράψει ένα μικρό python script για να διαγράφω τα backscatter
> mails από ένα mailbox με βάση το subject. Εάν και γνωρίζω ότι δεν
> είναι 100% bullet proof, για προσωπική χρήση είναι εξαιρετικό.
>
> http://ebalaskas.gr/wiki/pythontips
>
> Αλλά έχω το εξής πρόβλημα (όπου σε αντίθεση με perl δεν το βλέπω):
> Αργεί υπερβολικά (κοντά στο λεπτό - ανάλογα το μέγεθος του mbox) να
> ξεκινήσει. Πολύ φοβάμαι ότι με το
>
> mailbox.mbox( mbox )
>
> προσπαθεί να διαβάσει πρώτα ολάκερο το mbox για να ξεκινήσει το for ή
> μήπως προσπαθεί να το φορτώσει στην μνήμη ?

Καλησπέρα,

δεν έχω χρησιμοποιήσει το mbox ποτέ αλλά με μια ματιά που έριξα όντως
αυτό που φοβάσαι συμβαίνει. Συγκεκριμένα τη ζημιά την κάνει η
mailbox.mbox._generate_toc() και της οποίας το docstring λέει:
"""Generate key-to-(start, stop) table of contents.""" Προφανώς αν θες
να κάνεις ένα απλό σάρωμα του mailbox όπως στο σκριπτάκι σου όλη αυτή
η προεργασία είναι η περιττή.

Είναι απλό να δεις τι κάνει η _generate_toc και να γράψεις ένα
generator που να κάνει yield τα mails όπως τα βρίσκει αντί να τα
αποθηκεύει - επιπλέον θα τρώει πολύ λιγότερη μνήμη και ανεξάρτητη του
μεγέθους του mailbox. Ο χρόνος μέχρι να δεις το πρώτο μήνυμα στην
έξοδο θα είναι πρακτικά μηδέν αλλά ο συνολικός χρόνος θα είναι
πάνω-κάτω ο ίδιος.


More information about the PyAthens mailing list