asyncio compatibility shim for TinyDB
Enables usage of TinyDB in asyncio-aware contexts without slow syncronous IO.
See documentation on compatible version of TinyDB
.
Basically all API calls from TinyDB
are supported in AIOTinyDB
. With the following exceptions: you should not use basic with
syntax and close
functions. Instead, you should use async with
.
import asyncio
from aiotinydb import AIOTinyDB
async def test():
async with AIOTinyDB('test.json') as db:
db.insert(dict(counter=1))
loop = asyncio.new_event_loop()
loop.run_until_complete(test())
loop.close()
CPU-bound operations like db.search()
, db.update()
etc. are executed synchronously and may block the event loop under heavy load. Use multiprocessing if that's an issue (see #6 and examples/processpool.py for an example).
Any middlewares you use should be async-aware. See example:
from tinydb.middlewares import CachingMiddleware as VanillaCachingMiddleware
from aiotinydb.middleware import AIOMiddleware
class CachingMiddleware(VanillaCachingMiddleware, AIOMiddlewareMixin):
"""
Async-aware CachingMiddleware. For more info read
docstring for `tinydb.middlewares.CachingMiddleware`
"""
pass
If middleware requires some special handling on entry and exit, override __aenter__
and __aexit__
.
Instances of AIOTinyDB
support database access from multiple coroutines.
On unix-like systems, it's also possible to access one database concurrently from multiple processes when using AIOJSONStorage
(the default) or AIOImmutableJSONStorage
.
pip install aiotinydb