在Python中,如果数据库非常大,一个简单的select查询将花费大量时间。我有一个包含4700000条记录的表,如果我使用SELECT * FROM MY_TABLE来获取表中的所有数据,则需要18分钟。通过设置chunk_size并实现并行查询,可以节省时间。在
所以,我的代码是:import os
import time
import multiprocessing
import pandas as pd
import MySQLdb as mysql
if __name__ == '__main__':
conn = mysql.connect(host='192.168.0.114',
user='root',
passwd='fit123456',
db='A_stock_day',
charset='utf8'
)
limit = 100000
offset = 0
dfs = []
print 'start.....'
_s = time.time()
while True:
_query = 'SELECT * FROM A_stock_basic LIMIT %d OFFSET %d' %\
(limit, offset)
dfs.append(pd.read_sql(_query, conn))
offset += limit
if len(dfs[-1]) < limit:
break
_e = time.time()
print 'Time: ', _e - _s
full_df = pd.concat(dfs)
但是,还需要10分钟左右。如何将其并行化,让多个线程同时运行,使执行时间降到一个线程的执行时间?这里有多处理代码:
^{pr2}$
如您所见,尽管它启动了多处理,但一次只有一个进程读取数据库。所以,这只是多处理,而不是并行处理。在
如何实现并行多处理以节省时间?谢谢。在