Advertisement
wuster

Gracefully handling pymongo.errors.AutoReconnect

Sep 25th, 2011
421
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.62 KB | None | 0 0
  1. import functools
  2. import pymongo
  3. import logging
  4. import time
  5.  
  6. MAX_AUTO_RECONNECT_ATTEMPTS = 5
  7.  
  8. def graceful_auto_reconnect(mongo_op_func):
  9. """Gracefully handle a reconnection event."""
  10. @functools.wraps(mongo_op_func)
  11. def wrapper(*args, **kwargs):
  12. for attempt in xrange(MAX_AUTO_RECONNECT_ATTEMPTS):
  13. try:
  14. return mongo_op_func(*args, **kwargs)
  15. except pymongo.errors.AutoReconnect as e:
  16. wait_t = 0.5 * pow(2, attempt) # exponential back off
  17. logging.warning("PyMongo auto-reconnecting... %s. Waiting %.1f seconds.", str(e), wait_t)
  18. time.sleep(wait_t)
  19.  
  20. return wrapper
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement