您的位置:首页 > 其它

momoko tornado 连接池 异步

2012-12-08 23:49 232 查看
import tornado.ioloop

import tornado.web

import momoko

from tornado import gen

class BaseHandler(tornado.web.RequestHandler):

@property

def db(self):

# Create a database connection when a request handler is called

# and store the connection in the application object.

if not hasattr(self.application,
'db'):

self.application.db = momoko.AsyncClient({

'host':
'',

'database':
'',

'user':
'',

'password':
'',

'min_conn':
1,

'max_conn':
20,

'cleanup_timeout':
10

})

return self.application.db

class SingleQueryHandler(BaseHandler):

@tornado.web.asynchronous

@gen.engine

def get(self):

# One simple query

cursor = yield gen.Task(self.db.execute,
'SELECT 42, 12, %s, 11;', (25,))

self.write('Query results: %s' % cursor.fetchall())

self.finish()

class LSingleQueryHandler(BaseHandler):

@tornado.web.asynchronous

@gen.engine

def get(self):

# One simple query

cursor = yield gen.Task(self.db.execute,
'select count(*) from asd a,asd b,asd
c')

self.write('Query results: %s' % cursor.fetchall())

self.finish()

class BatchQueryHandler(BaseHandler):

@tornado.web.asynchronous

@gen.engine

def get(self):

# These queries are executed all at once and therefore they need to be

# stored in an dictionary so you know where the resulting cursors

# come from, because they won't arrive in the same order.

cursors = yield gen.Task(self.db.batch, {

'query1': ['SELECT 42, 12, %s, %s;', (23,
56)],

'query2':
'SELECT 1, 2, 3, 4, 5;',

'query3':
'SELECT 465767, 4567, 3454;'

})

for key, cursor
in cursors.items():

self.write('Query results: %s = %s<br>' % (key, cursor.fetchall()))

self.finish()

class QueryChainHandler(BaseHandler):

@tornado.web.asynchronous

@gen.engine

def get(self):

# Execute a list of queries in the order you specified

cursors = yield gen.Task(self.db.chain, (

['SELECT 42, 12, %s, 11;', (23,)],

'SELECT 1, 2, 3, 4, 5;'

))

for cursor
in cursors:

self.write('Query results: %s<br>' % cursor.fetchall())

self.finish()

class MultiQueryHandler(BaseHandler):

@tornado.web.asynchronous

@gen.engine

def get(self):

cursor1, cursor2, cursor3 = yield [

gen.Task(self.db.execute, 'SELECT 42, 12, %s, 11;', (25,)),

gen.Task(self.db.execute, 'SELECT 42, 12, %s, %s;', (23,
56)),

gen.Task(self.db.execute, 'SELECT 465767, 4567, 3454;')

]

self.write('Query 1 results: %s<br>' % cursor1.fetchall())

self.write('Query 2 results: %s<br>' % cursor2.fetchall())

self.write('Query 3 results: %s' % cursor3.fetchall())

self.finish()

class CallbackWaitHandler(BaseHandler):

@tornado.web.asynchronous

@gen.engine

def get(self):

self.db.execute('SELECT 42, 12, %s, 11;', (25,),

callback=(yield gen.Callback('q1')))

self.db.execute('SELECT 42, 12, %s, %s;', (23,
56),

callback=(yield gen.Callback('q2')))

self.db.execute('SELECT 465767, 4567, 3454;',

callback=(yield gen.Callback('q3')))

cursor1 = yield gen.Wait('q1')

cursor2 = yield gen.Wait('q2')

cursor3 = yield gen.Wait('q3')

self.write('Query 1 results: %s<br>' % cursor1.fetchall())

self.write('Query 2 results: %s<br>' % cursor2.fetchall())

self.write('Query 3 results: %s' % cursor3.fetchall())

self.finish()

class MainHandler(tornado.web.RequestHandler):

def get(self):

self.write("You requested the main page")

class StoryHandler(tornado.web.RequestHandler):

def get(self, story_id):

self.write(str(story_id))

application = tornado.web.Application([

(r"/", MainHandler),

(r"/story/([0-9]+)", StoryHandler),

(r"/test", SingleQueryHandler),

(r"/ltest", LSingleQueryHandler),

])

if __name__ == "__main__":

application.listen(8888)

tornado.ioloop.IOLoop.instance().start()
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: