Распараллеливание чтения из базы данных MySQL с помощью Python

Мне нужно прочитать данные из огромной таблицы (> 1 миллиона строк, 16 столбцов необработанного текста) и выполнить некоторую обработку. Чтение строки за строкой кажется очень медленным (python, MySQLdb), и я хотел бы иметь возможность читать несколько строк за раз (возможно, распараллелить это).

К вашему сведению, мой код сейчас выглядит примерно так:

cursor.execute('select * from big_table')
rows = int(cursor.rowcount)
for i in range(rows):
    row = cursor.fetchone()
    .... DO Processing ...

Я пытался запустить несколько экземпляров программы для итерации по различным разделам таблицы (например, 1-й экземпляр будет итерировать первые 200k строк, 2-й - 200k-400k ...), но проблема в том, что 2-му экземпляру (и 3-му, и так далее) требуется НЕСКОЛЬКО ЛЕТ, чтобы добраться до стадии, когда он начинает просматривать строку 200k и далее. Создается впечатление, что он все еще обрабатывает первые 200k строк, вместо того, чтобы пропустить их. Код, который я использую (для 2-го экземпляра) в этом случае, выглядит примерно так:

for i in range(rows):
    #Fetch the row but do nothing (need to skip over 1st 200k rows)
    row = cur.fetchone()
    if not i in range(200000,400000):
       continue
    .... DO Processing ...

Как я могу ускорить этот процесс? Есть ли чистый способ сделать более быстрое/параллельное чтение из базы данных MySQL через python?

EDIT 1: Я попробовал "LIMIT", основываясь на предложениях ниже. Однако по какой-то причине, когда я запускаю 2 процесса на своем четырехъядерном сервере, кажется, что одновременно выполняется только один процесс (похоже, что CPU разделяет время между этими процессами, в отличие от того, что каждое ядро запускает отдельный процесс). Два процесса python используют соответственно 14% и 9% CPU. Есть мысли, что может быть не так?

5
задан Andy 20 November 2011 в 22:39
поделиться