Tim Peters wrote:
The non-zope client has logic that looks roughly like:

for work in queue:
  try:
    get_transaction().begin()
    # do work, change zodb objects, etc
    get_transaction().commit()

  except ConflictError:
    get_transaction().abort()
    queue.append(work)
        
  except:
    get_transaction().abort()

Okay, where in the above should I be calling sync()? Where do I get sync from? get_transaction() doesn't have a synch attribute..

You mean apart from that `queue` grows without bound <0.9 wink>?

Well, I'm hoping that things won't conflicterror EVERY time <pi/10 wink>

Type this at Google:

    site:mail.zope.org  zodb-dev  asyncore  mainloop

Short course:  A ZEO client needs to run an asyncore mainloop if it wants to
get invalidations processed "by magic".  Alternatives include calling
sync(), or closing and (re)opening the connection, at appropriate times.

Hurm, this really should be in bright flashing neon somewhere. I the 5 years this process has been used, I've never known that ZEO don't work right when there's no asyncore loop :-(


Chris - who wants nothing to do with an asyncore loop, ever...

PS: Do the guys working on non-asyncore servers for Z3 know about this limitation?

--
Simplistix - Content Management, Zope & Python Consulting
           - http://www.simplistix.co.uk
_______________________________________________
For more information about ZODB, see the ZODB Wiki:
http://www.zope.org/Wikis/ZODB/

ZODB-Dev mailing list  -  ZODB-Dev@zope.org
http://mail.zope.org/mailman/listinfo/zodb-dev

Reply via email to