我已經寫一個Python腳本插入一些數據(300百萬)到MySQL表:Python:我的多進程代碼插入到MySQL有什麼問題?
#!/usr/bin/python
import os
import MySQLdb
from multiprocessing import Pool
class DB(object):
def __init__(self):
self.conn = MySQLdb.connect(host='localhost',user='root',passwd='xxx',db='xdd',port=3306)
self.cur = self.conn.cursor()
def insert(self, arr):
self.cur.execute('insert into RAW_DATA values(null,%s,%s,%s,%s,%s,%s,%s)', arr)
def close(self):
self.conn.commit()
self.cur.close()
self.conn.close()
def Import(fname):
db = DB()
print 'importing ', fname
with open('data/'+fname, 'r') as f:
for line in f:
arr = line.split()
db.insert(arr)
db.close()
if __name__ == '__main__':
# 800+ files
files = [d for d in os.listdir('data') if d[-3:]=='txt']
pool = Pool(processes = 10)
pool.map(Import, files)
的問題是,腳本運行速度非常非常慢,有沒有使用多的任何明顯的錯誤?
您應該運行一個分析器來檢查數據庫後端是否正在佔用所有時間。 – hivert
你爲什麼要並行化一個I/O綁定的任務? – kindall