Reputation: 79
Currently I fetch emails using an iterator this way:
for item in account.inbox.filter(datetime_received__gt=__LAST_ANALYSYS__+timedelta(0,1)):
I also test if type(item) == Message:
as another filter layer.
Issue: it takes 5-10 mins to fetch 400+ messages; I have a macbook pro 3.5 GHz Dual-Core Intel Core i7 and 16 GB 2133 MHz LPDDR3. I have reasonably fast broadband connect.
The app will be migrated to Azure soon. Will the retrieval speed improve?
Or, is there another trick i can employ? I saw a post about using the only(attribs)
nethod, but not sure if this helps materially, or how it can be combined with the account.inbox.filter
method? Thank you.
Upvotes: 1
Views: 1198
Reputation: 10220
Just try out the .only()
method and see if it helps your use-case. Usually it does, because without it, you'll be fetching everything; attachments, MIME content, and other heavy fields. If you have a folder where the ratio of Message items to other item types is low, you will also benefit by doing a filter on item_class
so you're filtering server-side, not client-side.
.only()
supports chaining, just like Django QuerySets: some_folder.filter(...).only(...)
. See https://ecederstrand.github.io/exchangelib/#searching
Upvotes: 3
Reputation: 440
You can use something like multithreading to speed up the process. Save the fetching part in a function and then run this:
threading.Thread(target=(function_name))
Upvotes: 1