#python #mysql #pyodbc
#python #mysql #pyodbc
Вопрос:
У меня возникла проблема при попытке заставить мою простую программу анализа данных, использующую MySQL, работать правильно.
На моем компьютере с Windows 7 я использую pyodbc, и программа работает нормально, используя 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 имя файла:lineno(функция) 512873 вызовов функций (508218 вызовов примитивов) за 6.849 секунд процессора
Кто-нибудь знает, что может быть причиной этого? Похоже, что большая часть этого времени была потрачена на _socket.метод ‘recv’ сокета, который, согласно Google, является чем-то, что получает данные. Этот метод сломан или что-то в этом роде? Кажется смешным, что это заняло бы почти в 15 раз больше времени.
И я думаю, что лучшим вопросом может быть … каков наилучший способ подключения к MySQL в Mac OS? До сих пор я пробовал pyodbc, а также MySQLdb, но безуспешно, чтобы заставить их установить.
Комментарии:
1. Я перешел по этой ссылке brambraakman.com/blog/comments / … для установки MySQLdb в Mac OS, и ti сработал для меня
Ответ №1:
Сначала вы должны убедиться, что вы на самом деле сравниваете одни и те же вещи.
метод sockets ‘recv’ означает, что программа чего-то ждет, поэтому, если ваша программа действительно выполняет одно и то же как на компьютере W7, так и на Mac, это может означать, что задержка в сети отличается. (Например, если ваш Mac использует беспроводную сеть, а компьютер с Windows 7 использует проводную сеть)
Чтобы исключить это, вы могли бы попробовать сравнить pyodbc и pymysql на компьютере с Windows. Тогда вы все еще получаете ту же разницу в скорости?
Как правило, если большая часть времени тратится на ‘recv’, проблема находится за пределами вашего приложения (и за пределами pyodbc / pymysql).