pymysql和pyodbc - pymysql太慢了

0 投票
1 回答
2446 浏览
提问于 2025-04-16 16:57

我在尝试让一个简单的数据分析程序正常运行时遇到了一些问题,这个程序是用MySQL的。

在我的Windows 7电脑上,我使用pyodbc,程序运行得很好,能够顺利连接到MySQL。但在Snow Leopard系统上,我没法正确安装pyodbc,所以我改用了pymysql...

最终让pymysql工作后,发现它运行得超级慢...

我刚做了一个测试 - 在Mac OS Snow Leopard上运行我的程序,通过cProfile分析,结果是:

26849449次函数调用(其中26844794次是基本调用),耗时103.196秒。

...(唯一一个耗时超过几秒的函数是recv)

   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
   176088   76.960    0.000   76.960    0.000 {method 'recv' of '_socket.socket' objects}

...

在Windows 7的虚拟机上用pyodbc运行同样的程序(连接到主机电脑上运行的同一个MySQL数据库):

执行Muncher作为主程序。 ncalls tottime percall cumtime percall filename:lineno(function) 512873次函数调用(508218次基本调用),耗时6.849秒。

有没有人知道这可能是什么原因呢?看起来大部分时间都花在了_socket.socket的'recv'方法上,谷歌说这个方法是用来接收数据的。这个方法是不是坏了?感觉耗时几乎是15倍,真是太离谱了。

我想问的一个更好的问题是...在Mac OS上连接MySQL的最佳方式是什么?到目前为止,我尝试过pyodbc和MySQLdb,但都没能成功安装。

1 个回答

0

首先,你得确保你比较的东西是一样的。

在编程中,sockets的'recv'方法意味着程序在等待某些东西。所以如果你的程序在Windows 7电脑和Mac上都做同样的事情,那可能是因为网络延迟不一样。
(比如说,如果你的Mac用的是无线网络,而Windows 7电脑用的是有线网络)

为了排除这个可能性,你可以试着在Windows电脑上比较一下pyodbc和pymysql的表现。这样速度的差异还会存在吗?

通常情况下,如果大部分时间都花在'recv'上,那问题就可能出在你的应用程序之外(也就是pyodbc和pymysql之外)。

撰写回答