我希望tornado支持异步sql数据库操作,在我阅读源代码之后,
http://www.tornadoweb.org/documentation/_modules/tornado/database.html#Connection http://www.tornadoweb.org/documentation/_modules/tornado/database.html#Connection
叹息,他们是阻塞版本。这里有一些选择。
计划A:找到一组类似于mysqldb模块的api,除了他们使用回调返回reuslt。抱歉,我没有找到一个显示示例的api,他们的api可以处理非阻塞mysql操作
Plan B:使用block版本。我听说tornado的作者建议开发者使用block版本,并且极度优化你的sql查询以缩短阻塞时间。
就我而言:服务器需要在高峰时段处理每秒接收 2k 请求,其中大多数需要从数据库查询和更新,建议每个操作需要 10ms,10ms*2k 超过 20s,这将是一场噩梦。在多线程编程中至少我可以建立更多的连接以获得更长的平均响应时间。
也许我在这里错过了一些要点,我对后端开发没有太多经验。但是我仍然认为使用阻塞 io api 是一个糟糕的主意,而框架是非阻塞的。
Plan C:放弃MySql而使用mongoDB,我听说mongoDB有一个名为asyncmongo的异步Python实现api,但我不确定学习mongoDB并把mongoDB作为我们的业务选择的风险
另一种选择是设置多处理(http://docs.python.org/library/multiprocessing.html?highlight=multiprocessing#multiprocessing http://docs.python.org/library/multiprocessing.html?highlight=multiprocessing#multiprocessing)并使用其中一个进程作为数据库的队列管理器。
将多处理与高效的 SQL 查询相结合,您应该最大限度地减少总体影响。阻塞调用仅在数据库处理队列管理器进程上完成,应用程序的其余部分可以运行而不会被阻塞。唯一受影响的人是尝试同时运行数据库查询的人。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)