小编Cro*_*bot的帖子

Tornado Web框架Mysql连接处理

我最近一直在探索Tornado Web框架,以便为许多不同的客户提供大量一致的连接.

我有一个请求处理程序,基本上采用RSA加密字符串并解密它.解密的文本是一个XML字符串,由我编写的SAX文档处理程序解析.一切都很好,执行时间(每个HTTP请求)大约是100毫秒(解密和解析).

XML包含用户的用户名和密码哈希.我想连接到MySQL服务器以验证用户名是否与应用程序提供的密码哈希相匹配.

当我基本上添加以下代码时:

conn = MySQLdb.connect (host = "192.168.1.12",
                user = "<useraccount>",
                passwd = "<Password>",
                db = "<dbname>")
    cursor = conn.cursor()

    safe_username = MySQLdb.escape_string(XMLLoginMessage.username)
    safe_pass_hash = MySQLdb.escape_string(XMLLoginMessage.pass_hash)

    sql = "SELECT * FROM `mrad`.`users` WHERE `username` = '" + safe_username + "' AND `password` = '" + safe_pass_hash + "' LIMIT 1;"

    cursor.execute(sql)

            cursor.close()
    conn.close()
Run Code Online (Sandbox Code Playgroud)

执行HTTP请求所需的时间最多可达4-5秒!我相信这是在连接到MySql数据库服务器本身所花费的时间内产生的.

我的问题是如何加快速度?我可以在全局范围内声明MySQL连接并通过创建新游标在请求处理程序中访问它,还是因为Tornado的异步设计会遇到并发问题?

基本上,我怎么能不必每次Http请求都需要与MySQL服务器建立新的连接,所以它只需要几分之一秒而不是多秒来实现.

另请注意,SQL Server实际上与Tornado Web Server实例位于同一台物理计算机上

更新

我只是通过一个分析器运行一个简单的MySQL查询,下面的代码相同.

以"connections.py"调用初始化函数把4.944秒单独执行.那似乎不对,是吗?

更新2

我认为使用一个连接(或者甚至一些具有非常简单的DB conn池)运行将足够快以处理我期望的每个龙卷风web服务器实例的吞吐量.

如果1,000个客户端需要访问查询,典型的查询时间在几千秒内,那么最不幸的客户端只需要等待一秒钟来检索数据.

python mysql time tornado persistent-connection

5
推荐指数
1
解决办法
3666
查看次数

标签 统计

mysql ×1

persistent-connection ×1

python ×1

time ×1

tornado ×1