通过Python并行化从MySQL数据库读取

And*_*ndy 5 python parallel-processing 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 ...
Run Code Online (Sandbox Code Playgroud)

我试图运行程序的多个实例来迭代表的不同部分(例如,第一个实例将遍历第一个200k行,第二个实例将遍历行200k-400k ......)但问题是第二个实例(以及第三个实例等)需要FOREVER才能进入开始查看行200k以后的阶段.它似乎仍然在处理第一个200k行而不是跳过它们.我在这种情况下使用的代码(第二个实例)是这样的:

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 ...
Run Code Online (Sandbox Code Playgroud)

我怎样才能加快这个过程?有没有一种干净的方法通过python从MySQL数据库进行更快/并行的读取?

EDIT 1:我根据以下建议尝试了"限制"的事情.出于某种原因,虽然当我在我的四核服务器上启动2个进程时,似乎一次只运行一个进程(CPU似乎是在这些进程之间共享时间,而不是每个核心运行一个单独的进程).2个python进程分别使用了14%和9%的CPU.有什么想法可能是错的?

Ign*_*ams 2

LIMIT子句可以采用两个参数,其中第一个是起始行,第二个是行计数。

SELECT ...
 ...
LIMIT 200000,200000
Run Code Online (Sandbox Code Playgroud)