pymysql与pyodbc - pymysql是sloooooooooooow

时间:2011-05-04 05:53:16

标签: python mysql pyodbc

我一直在尝试使用MySQL正常工作的简单数据分析程序。

在我的Windows 7计算机上,我使用pyodbc并且程序运行正常,使用pyodbc连接到MySQL。在Snow Leopard上,无法正确安装pyodbc所以我正在使用pymysql而不是......

最终让pymysql工作后,它运行得非常慢......

刚做了一个测试 - 通过cProfile在Mac OS Snow Leopard上运行我的程序,得到了:

26849449函数调用(26844794基元调用)在103.196 CPU秒

...(总时间超过几秒的唯一方法是recv)

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

...

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

执行Muncher作为主程序。       ncalls tottime percall cumtime percall filename:lineno(function)       在6.849 CPU秒中512873函数调用(508218原始调用)

有谁知道造成这种情况的原因是什么?看起来大部分时间花在了_socket.socket的'recv'方法上,根据Google的说法,这种方法可以接收数据。这种方法是破碎还是什么?看起来荒谬可能需要几乎15倍的时间。

我想更好的问题可能是......在Mac OS上连接MySQL的最佳方式是什么?到目前为止,我已经尝试过pyodbc以及MySQLdb,但没有运气安装它们。

1 个答案:

答案 0 :(得分:0)

首先,你应该确保你实际上是在比较相同的东西。

套接字'recv'方法意味着程序正在等待某些东西,所以如果你的程序在W7机器和Mac上实际上做同样的事情,这可能意味着网络延迟是不同的。 (例如,如果您的Mac使用无线网络,而Windows 7计算机使用有线网络)

要排除您可以尝试在Windows计算机上比较pyodbc和pymysql。那你的速度差异是否仍然相同?

通常情况下,如果大部分时间花费在'recv'上,则问题出在应用程序之外(并且在pyodbc / pymysql之外)。