在像龙卷风这样的异步web框架中,我们可以使用它的@gen.coroutine或@tornado.web.asynchronous装饰器进行非阻塞调用。例如,我们可以使用AsyncHTTPClient模块进行非阻塞或异步调用。
因此,我们可以通过使用@gen.coroutine装饰符和“@gen.coroutine”关键字来使用它,比如“产生@gen.coroutine”,或者使用带有@tornado.web.asynchronous的回调函数。对于这两种方法,它都是非阻塞的。
同样,为什么Python的MySQL驱动程序/客户端(如MySQLdb、PyMySQL、mysqlclient等)不能采用同样的方式。我的意思是,为什么不能将这些驱动程序与使用gen.coroutine或通过web.asynchronous装饰器进行回调的方式类似。为什么驱动程序不能与gen.coroutine或web.asynchronous一起使用来进行非阻塞调用?
阻止它们异步的原因是什么,我的意思是AsyncHTTPClient是如何非阻塞的,但是MySQLdb.connect、MySQLdb.connect().cursor.query()等等不是吗?
我也知道异步龙卷风特有的MySQL驱动程序/客户端很少,比如TorMySQL、TorMySQL (由PyMySQL)、异步数据库等等。但是为什么常规的驱动程序/客户机(如mysqlclient或MySQLdb )不能直接用作非阻塞的,或者在TorMySQL中所做的更改是什么,龙卷风- mysql (通过PyMySQL),它们被定义为旋风的异步mysql驱动程序/客户机?
发布于 2016-01-14 02:41:50
当我们说龙卷风是一个异步框架时,这是一种需求,而不是一种效果。要有效地使用“旋风”,任何昂贵的操作都必须是异步的;旋风不能神奇地使同步代码异步。这意味着您需要选择与Tor旋风兼容的异步库,或者在另一个线程中运行昂贵的阻塞操作。
有关更多细节,请参见龙卷风用户指南中的异步I/O介绍。
https://stackoverflow.com/questions/34779651
复制相似问题