0

MySQL を使用する単純なデータ分析プログラムを正しく動作させようとして問題が発生しました。

私の Windows 7 コンピューターでは pyodbc を使用しており、pyodbc を使用して MySQL に接続すると、プログラムは正常に動作します。Snow Leopard では、pyodbc を正しくインストールできなかったため、代わりに pymysql を使用しています...

最終的にpymysqlが動作するようになった後、実行速度が非常に遅くなります...

テストを行ったところ、cProfile を介して Mac OS Snow Leopard でプログラムを実行したところ、次の結果が得られました。

103.196 CPU 秒で 26849449 回の関数呼び出し (26844794 回のプリミティブ呼び出し)

... (合計時間が数秒を超える唯一のメソッドは 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) 512873 関数呼び出し (508218 プリミティブ呼び出し) 6.849 CPU 秒

誰がこれを引き起こしているのか知っていますか? その時間のほとんどは、_socket.socket の「recv」メソッドに費やされたようです。Google によれば、これはデータを受信するものです。その方法は壊れていますか?ばかげているように思えますが、ほぼ 15 倍の時間がかかります。

Mac OS で MySQL に接続する最良の方法は何ですか? これまでのところ、pyodbc と MySQLdb を試してみましたが、うまくインストールできませんでした。

4

1 に答える 1

0

まず、実際に同じものを比較していることを確認する必要があります。

ソケットの 'recv' メソッドは、プログラムが何かを待っていることを意味するため、プログラムが実際に W7 マシンと Mac の両方で同じことを行う場合、ネットワーク レイテンシが異なることを意味する可能性があります。(たとえば、Mac がワイヤレス ネットワークを使用し、Windows 7 マシンが有線ネットワークを使用している場合)

Windows マシンで pyodbc と pymysql を比較してみてください。それでも同じ速度差が得られますか?

通常、ほとんどの時間が「recv」に費やされている場合、問題はアプリケーションの外部 (および pyodbc/pymysql の外部) にあります。

于 2011-06-09T13:51:42.333 に答える