Hi, On 11/26/2009 10:55 PM, tsmiller wrote: > > Christian, > Thanks. How painfully obvious. I have written the words > 'transaction.begin()' about a thousand times or so! But I get > discombobulated when I start looking at something new ( ZEO ) and forget the > obvious. Final code for this little test that works perfectly: > > while True: > transaction.begin() > root[ "one" ] = "program 2 - " + time.asctime() > while True: > try: > transaction.commit() > except POSException.ConflictError: > time.sleep(.2) > else: > break > > time.sleep(5)
Two notes: First, I'd leave the transaction.abort() right before the time.sleep(). Just to be explicit. Second, the second while loop is superfluous - it doesn't do what it looks like and what you might think it does. ;) You can try committing exactly once. If you commit after a conflict error, that will give you a different exception. On the framework level conflict errors are usually handled by re-trying the *whole* transaction once more. E.g. in Zope it means: - abort the transaction - start a new transaction - process the request as it was again If it fails for three times then Zope gives up and hands the conflict error to the user. Christian -- Christian Theune · c...@gocept.com gocept gmbh & co. kg · forsterstraße 29 · 06112 halle (saale) · germany http://gocept.com · tel +49 345 1229889 0 · fax +49 345 1229889 1 Zope and Plone consulting and development _______________________________________________ For more information about ZODB, see the ZODB Wiki: http://www.zope.org/Wikis/ZODB/ ZODB-Dev mailing list - ZODB-Dev@zope.org https://mail.zope.org/mailman/listinfo/zodb-dev