有关在Python3中使用非阻塞MySQL api在Tornado上的任何建议吗?

时间:2012-09-02 09:58:02

标签: python database asynchronous io tornado

在我阅读源代码之后,我希望龙卷风支持异步sql数据库opertion,

http://www.tornadoweb.org/documentation/_modules/tornado/database.html#Connection

叹了口气,他们正在阻止版本。有一些选择。

计划A:找到一组类似于mysqldb模块的api,除了它们使用回调来返回reuslt.sorry我没找到一个显示其api可以处理非阻塞mysql操作的示例

计划B:使用块版本。听说龙卷风的作者建议开发人员使用块版本,并极大地优化你的sql查询以缩短阻塞期。

在我的情况下:服务器需要处理在高峰时段每秒接收2k请求,并且大多数需要从数据库查询和更新,建议每个操作需要10ms,10ms * 2k超过20s,这将是一场噩梦。多线程编程至少我可以建立更多的连接以获得更多的平均响应时间。

也许我在这里错过了一些观点,我对后端开发没有多少经验。但是我仍然认为使用阻止io api是一个糟糕的想法,而框架是非阻塞的。

计划C:删除MySql使用mongoDB,我听说mongoDB有一个名为asyncmongo的异步Python工具api,但我不确定学习mongoDB并将mongoDB作为我们的业务选择的风险

1 个答案:

答案 0 :(得分:1)

另一种选择是设置多处理(http://docs.python.org/library/multiprocessing.html?highlight=multiprocessing#multiprocessing)并将进程用作数据库的队列管理器。

将多处理与高效的SQL查询相结合,您应该最大限度地减少整体影响。阻塞调用只能在数据库处理队列管理器进程上完成,而应用程序的其余部分可以在不被阻止的情况下运行。唯一受影响的人是那些试图同时运行数据库查询的人。