Зависание _mysql (mysqldb)
Мучался-мучался, на выборке висит модуль _mysql (это биндинг mysqldb к MySQL у Python). Совершенно случайно заметил, что нигде не указываю кодировку, указал — виснуть перестало.
Судя по strace, модуль чего-то ждёт из сокета, ощущение такое, что просто неверно подсчитывается длина контента — если не указать кодировку, данных ожидается больше, чем приходит. Мда.
Добавлено чуть позже: да что ж такое! Опять висит. И с указанием кодировки — тоже. В интернете ничего нет, что же я не так делаю?
Через _mysql — висит, через MySQLdb — тоже, через execute — висит, через курсор — тоже. Что ж это такое-то?
Добавлено ещё позже: вот весь код:
import MySQLdb as mysql
db = mysql.connect(\
host = 'localhost',
user = 'log',
passwd = 'xxx',
db = 'log',
use_unicode = True,
charset='utf8'
)
c = db.cursor()
c.execute("SELECT * FROM wp_4_posts")
Вот так уже висит. Не знаю что с этим делать, пойду домой.
А ты тут раньше pymysql упоминал. Почему пользуешься именно mysql-python, а не им?
Комментарий для lxj.endofinternet.net:
Я его попробовал поставить. Не смог подключиться ничем, кроме рута. Когда сменил пароль рута, то и рутом не смог. Ошибка авторизации пишет (ошибка №1043).
А сколько строк в wp_4_posts и какой курсор используется?
*какие курсоры пробовал, очевидно
Ну и, видимо, глупый вопрос -- другими способами (скажем, в консольном mysql-клиенте) запрос выполняется без проблем?
Комментарий для lxj.endofinternet.net:
Строк — дофига, не считал
только дефолтный
увы, да, консольный клиент выдаёт без проблем
Если строк дофига, то может быть стоит попробовать use_result вместо store_result? Ну или попробовать для начала считать не все строки, а по сотне
Комментарий для lxj.endofinternet.net:
Ох, оказалось, что после перезагрузки всё нормализировалось. Я как-то не ожидал такого.