2013-03-19 2 views
3

Следующий код извлекает параметр из запроса и отвечает с couchbase db в соответствии с значением параметра.Как оптимизировать торнадо?

couchbase = Couchbase("ubuntumartini03:8091", "thebucket", "") 
bucket = couchbase["thebucket"] 

class MH(tornado.web.RequestHandler): 
     def get(self): 
       key = self.get_argument("pub_id", strip=True) 
       result = json.loads(bucket.get(key)[2]) 
       self.write(result['metaTag']) 


if __name__=="__main__": 
     app = tornado.web.Application(handlers=[(r"/", MH)]) 
     app.listen(8888,"") 
     tornado.ioloop.IOLoop.instance().start() 

Проблема: Для данного аппаратного обеспечения, мы можем сделать 10к/сек вызовы Couchbase от Tornado машины. Но когда мы звоним с клиента на машину Tornado, мы можем делать только 350 звонков в секунду.

Несомненно, узким местом здесь является торнадо. Как оптимизировать его, чтобы иметь возможность совершать как минимум 7k вызовов/сек?

+0

Что такое пропускная способность торнадо без вызова db и разбор json (result = json.loads (bucket.get (key) [2]))? –

+0

Исправьте меня, если я ошибаюсь, но клиент python использует синхронный API, он может блокировать реактор торнадо – avsej

+0

@avsej: R u говорит о клиенте Couchbase python? 10k/sec было достигнуто с использованием этого – codersofthedark

ответ

0

Какой клиент вы используете, является ли он синхронным или ансинхронным клиентом? Если это синхронный клиент, он не может полностью использовать реактор торнадо-илоопа.

+1

Клиент Python Couchbase является синхронным. Если бы мы могли совершать звонки в 10 к/сек с ним, мы не сможем сделать это с помощью реактора торнадо-илоопа. В случае нет, то что должно быть сделано в таком сценарии? – codersofthedark

Смежные вопросы