AsyncMongo is an asynchronous library for accessing mongo which is built on the tornado ioloop.
Installing: pip install asyncmongo
asyncmongo syntax strives to be similar to pymongo.
import asyncmongo
import tornado.web
class Handler(tornado.web.RequestHandler):
@property
def db(self):
if not hasattr(self, '_db'):
self._db = asyncmongo.Client(pool_id='mydb', host='127.0.0.1', port=27017, maxcached=10, maxconnections=50, dbname='test')
return self._db
@tornado.web.asynchronous
def get(self):
self.db.users.find({'username': self.current_user}, limit=1, callback=self._on_response)
# or
# conn = self.db.connection(collectionname="...", dbname="...")
# conn.find(..., callback=self._on_response)
def _on_response(self, response, error):
if error:
raise tornado.web.HTTPError(500)
self.render('template', full_name=response['full_name'])
Some features are not currently implemented:
- directly interfacing with indexes, dropping collections
- retrieving results in batches instead of all at once (asyncmongo's nature means that no calls are blocking regardless of the number of results you are retrieving)
- tailable cursors #15
The following two python libraries are required
Please report any issues via github issues