我一直在尝试使用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,但没有运气安装它们。
答案 0 :(得分:0)
首先,你应该确保你实际上是在比较相同的东西。
套接字'recv'方法意味着程序正在等待某些东西,所以如果你的程序在W7机器和Mac上实际上做同样的事情,这可能意味着网络延迟是不同的。 (例如,如果您的Mac使用无线网络,而Windows 7计算机使用有线网络)
要排除您可以尝试在Windows计算机上比较pyodbc和pymysql。那你的速度差异是否仍然相同?
通常情况下,如果大部分时间花费在'recv'上,则问题出在应用程序之外(并且在pyodbc / pymysql之外)。