Advertisement
adam_avramov

Untitled

Dec 5th, 2012
401
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 0.86 KB | None | 0 0
  1. @transaction.commit_manually
  2. def worker():
  3.     while True:
  4.         logger.info("Loop repeats itself.")
  5.  
  6.         for item in queue:
  7.             savept = transaction.savepoint()
  8.             try:
  9.  
  10.                 if item.success():
  11.  
  12.                     logger.info("Win")
  13.                     transaction.savepoint_commit(savept)
  14.  
  15.                 else:
  16.  
  17.                     transaction.savepoint_rollback(savept)
  18.  
  19.                     item.error = True
  20.                     item.save()
  21.                     logger.error("Fail")
  22.                     transaction.savepoint_commit(savept)
  23.  
  24.             except:
  25.                 transaction.savepoint_rollback(savept)
  26.                 logger.exception("Stopped prematurely, for attached reason.")
  27.                 transaction.savepoint_commit(savept)
  28.                 sys.exit()
  29.  
  30.             finally:
  31.                 transaction.commit()    # commit to DB after every item so that queries always return up-to-date info
  32.                                         # (workaround for the way the Django ORM works)
  33.  
  34.             # sleep for a while
  35.  
  36.         logger.info("Queue finished.")
  37.         transaction.commit()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement