Re: How to use ZODB & ZEO from asyncio code?
Jim Fulton <[email protected]> Fri, 6 Oct 2017 08:44:50 -0400
| Newsgroups | gmane.comp.web.zope.zodb |
|---|---|
| Message-ID | <CAPDm-FiU256mux7s+HFVuckbma-orYiHpXuDCj3QLqiG4uo9Vw@mail.gmail.com> |
Some other things to note: - ZODB per-connection object caches can be expensive. Using an async framework that leads to many ZODB connections can incur a significant memory burden or lead to object caches configured to be too small. - An alternative to using ZODB asynchronously is to do I/O using an async framework, but run application logic in a thread pool. This is the approach many web frameworks have used for a long time. Jim On Fri, Oct 6, 2017 at 7:52 AM, Jim Fulton <[email protected]> wrote: > > > On Fri, Sep 29, 2017 at 8:20 AM, Petri Savolainen <[email protected]> > wrote: > >> The Python ecosystem now has various asyncio servers and frameworks. It >> would be great to be able to use ZODB for persistence from them (directly >> or via ZEO). How should it be done? Any documentation anywhere, similar to >> the documentation that exists on using ZODB & ZEO from blocking code? >> > > ZODB currently provides a fundamentally synchronous API. There are two > aspects to this: > > 1. Lazy loading of data. > > When using ZODB, you don't explicitly load data. You merely get the > root object and traverse it in various ways. There is no sane way, IMO, to > make this async in general. > - It's worth noting though that if the data you need is already in > memory, then access is no more blocking than other in-memory Python code. > - I could see adding an asynchronous API for pre-fetching objects, > in those rare cases that you knew you were going to load specific objects. > - Some projects use gevent, which provides a synchronous API over > asynchronous I/O. > > 2. Defining transaction boundaries (begin/commit/abort). > > This is often where a lot of potentially I/O blocking work happens. > It's easy to imagine an async version of this API. This is probably the > biggest opportunity. An application that had a high object-cache hit rate > and used an asynchronous begin/commit/abort API could play well with an > async architecture. > - For some applications, it might make sense to provide a policy > that when non-ghost objects are invalidated, their data is reloaded, which > could happen as part of an async begin/commit/abort. > > Having said all of that, I'll add a more or less standard disclaimer that > while I'm a fan (and decades long user) of async frameworks for I/O > dominant use cases, I think async architectures are horrible for general > computing. > > Jim > > -- > Jim Fulton > http://jimfulton.info > -- Jim Fulton http://jimfulton.info -- You received this message because you are subscribed to the Google Groups "zodb" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. For more options, visit https://groups.google.com/d/optout.