pymysql против pyodbc — pymysql оооооооооооочень низкий

#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).