有没有关于在Python3中的Tornado上使用非阻塞MySQL api的建议?

有没有关于在Python3中的Tornado上使用非阻塞MySQL api的建议?,python,database,asynchronous,io,tornado,Python,Database,Asynchronous,Io,Tornado,我希望tornado支持异步sql数据库操作,在我阅读了源代码之后 唉,他们在屏蔽版本。这里有一些选择 计划A:找到一组类似于mysqldb模块的api,除了它们使用回调返回reuslt。很抱歉,我没有找到一个示例,说明它们的api可以处理非阻塞mysql操作 方案B:使用块版本。我听说tornado的作者建议开发人员使用块版本,并对sql查询进行极大的优化,以缩短阻塞周期 在我的例子中:服务器需要在高峰时间处理每秒接收2k的请求,其中大多数需要从数据库查询和更新,建议每个操作需要10毫秒,1

我希望tornado支持异步sql数据库操作,在我阅读了源代码之后

唉,他们在屏蔽版本。这里有一些选择

计划A:找到一组类似于mysqldb模块的api,除了它们使用回调返回reuslt。很抱歉,我没有找到一个示例,说明它们的api可以处理非阻塞mysql操作

方案B:使用块版本。我听说tornado的作者建议开发人员使用块版本,并对sql查询进行极大的优化,以缩短阻塞周期

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

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


方案C:放弃MySql使用mongoDB,我听说mongoDB有一个名为asyncmongo的异步Python实现api,但我不确定学习mongoDB并将mongoDB作为我们的业务选择的风险

另一个选项是设置多处理()并将其中一个进程用作DB的队列管理器


将多处理与高效的SQL查询相结合,您应该将总体影响降至最低。阻塞调用将仅在DB处理队列管理器进程上执行,应用程序的其余部分可以在不被阻塞的情况下运行。唯一受影响的人是那些试图同时运行DB查询的人。

谢谢您的回答,是否已经存在可以直接使用的内容,或者我需要自己编写?我不知道你最后一句话的意思,你的意思是在这个解决方案中,DB查询只能一个接一个地执行,如果有人使用sql client查询mysql,那么他们就会失败?我知道,现在访问mysql的所有Python模块都在阻止调用。据我所知,这是无法避免的。我已经看到了对mysqldb模块的修改,可以最大限度地减少阻塞调用。但事实仍然是,一些MySQL调用无法解决这个问题。发生在他们身上的是他们排队。因此,当三个人试图同时执行一个MySQL查询时,他们会按照放入队列的顺序执行。我明白了,但我在多处理编程方面没有经验,在你的描述中,似乎我将有另一个进程来保存和排队来自主进程的所有db查询,问题是:我可以将回调函数发送到另一个进程吗?有几种实现方法,其中许多都支持回调。