gpt4 book ai didi

python - Tornado 真的是无阻塞的吗?

转载 作者:IT老高 更新时间:2023-10-28 20:50:16 25 4
gpt4 key购买 nike

Tornado 标榜自己是“一个相对简单的非阻塞 Web 服务器框架”,旨在解决 C10k 问题。然而,查看他们包装 MySQLdb 的数据库包装器,我发现了以下代码:

def _execute(self, cursor, query, parameters):
try:
return cursor.execute(query, parameters)
except OperationalError:
logging.error("Error connecting to MySQL on %s", self.host)
self.close()
raise

据我所知,对建立在 libmysqlclient 之上的 MySQLdb 的调用正在阻塞。

我是否认为长时间运行的查询会导致整个 Tornado 服务器在完成之前无响应,或者代码中有什么魔力?

最佳答案

如果您在顶部编写非阻塞代码,则 Tornado 是非阻塞的,例如。使用 asyncmongo@tornado.web.asynchronous装饰师。 Tornado 作为一个框架为此提供了工具。

布雷特·泰勒,原作者之一,writes :

We experimented with different async DB approaches, but settled on synchronous at FriendFeed because generally if our DB queries were backlogging our requests, our backends couldn't scale to the load anyway. Things that were slow enough were abstracted to separate backend services which we fetched asynchronously via the async HTTP module.

Tornado 确实不包含非阻塞数据库层;事实上,数据库层根本不是 Tornado 框架的组成部分,而不是例如。 Django 的 ORM。是的,Tornado 附带了阻塞 MySQL 包装器,因为这正是 FriendFeed 碰巧使用的,但它更像是一个外部库而不是核心功能。我很确定大多数人都在使用其他东西来访问数据库。

关于python - Tornado 真的是无阻塞的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3638844/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com