2011-05-04 278 views
0

我一直在試圖讓我的簡單數據分析程序,使用MySQL正常工作的問題。pymysql與pyodbc - pymysql is sloooooooooooow

在我的Windows 7計算機上,我使用pyodbc,程序運行正常,使用pyodbc連接到MySQL。雪豹,無法得到pyodbc正確安裝,所以我使用pymysql,而不是...

終於得到pymysql工作後,它運行超慢...

只是做了一個試驗 - 然我在Mac OS雪豹,通過CPROFILE計劃,並得到了:

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文件名:LINENO(功能) 512873函數調用在6.849秒的CPU

(508218個原始呼叫)

有誰知道什麼可能會造成這個?看起來大部分時間都花在了_socket.socket的'recv'方法上,根據Google的說法,它是接收數據的東西。這種方法是打破了什麼?看起來很荒謬,它會花費近15倍的時間。

我想一個更好的問題可能是......在Mac OS上連接MySQL的最佳方式是什麼?我已經嘗試pyodbc以及MySQLdb到目前爲止沒有運氣讓他們安裝。

+0

我遵循此鏈接http://www.brambraakman.com/blog/comments/installing_mysql_python_mysqldb_on_snow_leopard_mac_os_x_106/獲取安裝在Mac OS上的MySqlDb,併爲我工作 – MiPnamic 2011-05-04 08:52:07

回答

0

首先你應該確保你實際上是在比較相同的東西。

套接字'recv'方法意味着程序正在等待某個東西,所以如果你的程序在W7機器和Mac上都做了同樣的事情,那可能意味着網絡延遲是不同的。 (例如,如果您的Mac使用的是無線網絡,並且Windows 7機器使用有線網絡)

要排除您可以嘗試比較Windows機器上的pyodbc和pymysql,你仍然在速度上有相同的區別嗎?

通常,如果大部分時間都花在'recv'上,那麼問題出在您的應用程序之外(以及pyodbc/pymysql之外)。