为什么MySQLdb、mysqlclient或PyMySQL等MySQL驱动程序/客户机即使在Tornado等异步Web框架中使用,也会考虑阻塞?

2024-04-25 19:32:25 发布

您现在位置:Python中文网/ 问答频道 /正文

在像Tornado这样的异步web框架中,我们可以使用@通用协同程序或者@tornado.web.asynchronous公司装饰工。例如,我们可以通过使用AsyncHTTPClient模块来执行非阻塞或异步调用。在

所以我们可以通过使用@通用协同程序decorator加上“yield”关键字,比如“yield”tornado.httpclient.AsyncHTTPClient().fetch(url)”或使用回调函数@tornado.web.asynchronous公司. 对于这两种方法,它都是非阻塞的。在

同样地,为什么不能对Python的MySQL驱动程序/客户机(比如MySQLdb、PyMySQL、mysqlclient等)进行同样的操作呢?我的意思是,为什么这些驱动程序不能像AsyncHTTPClient与它们一起使用的方式相似呢通用协同程序或通过web.异步装饰工。为什么司机不能和通用协同程序或者web.异步让电话不阻塞?在

是什么原因阻止了它们异步,我是说AsyncHTTPClient是非阻塞的,但是MySQLdb.connect, MySQLdb.connect().光标.查询(),等等不是吗?在

我也知道很少有像TorMySQL、Tornado MySQL(by PyMySQL)、asynctorndb等特定于异步Tornado的MySQL驱动程序/客户端,但是为什么不能直接使用mysqlclient或MySQLdb这样的普通驱动程序/客户机作为非阻塞,或者TorMySQL做了哪些改变,Tornado MySQL(由PyMySQL编写)是否被定义为Tornado的异步MySQL驱动程序/客户端?在


Tags: web客户机驱动程序mysql公司装饰tornadomysqlclient
1条回答
网友
1楼 · 发布于 2024-04-25 19:32:25

当我们说Tornado是一个异步框架时,这是一个需求而不是效果。为了有效地使用Tornado,任何昂贵的操作都必须是异步的;Tornado无法神奇地使同步代码异步。这意味着您需要选择与Tornado兼容的异步库,或者在另一个线程中运行昂贵的阻塞操作。在

有关详细信息,请参阅introduction to asynchronous I/O in the Tornado User's guide。在

相关问题 更多 >