На самом деле, я пытаюсь обновить одну таблицу с несколькими процессами через pymysql
, и каждый процесс читает CSV-файл, отделенный от огромного, чтобы повысить скорость.Но я получаю Lock wait timeout exceeded; try restarting transaction exception
, когда запускаю скрипт.После поиска постов на этом сайте я обнаружил один пост, в котором упоминалось, что для установки или сборки встроенного LOAD_DATA_INFILE нет подробностей.Как я могу сделать это с помощью 'pymysql', чтобы достичь своей цели?
--------------------------- first edit----------------------------------------
Вот метод работы:
`def importprogram(path, name):
begin = time.time()
print('begin to import program' + name + ' info.')
# "c:\\sometest.csv"
file = open(path, mode='rb')
csvfile = csv.reader(codecs.iterdecode(file, 'utf-8'))
connection = None
try:
connection = pymysql.connect(host='a host', user='someuser', password='somepsd', db='mydb',
cursorclass=pymysql.cursors.DictCursor)
count = 1
with connection.cursor() as cursor:
sql = '''update sometable set Acolumn='{guid}' where someid='{pid}';'''
next(csvfile, None)
for line in csvfile:
try:
count = count + 1
if ''.join(line).strip():
command = sql.format(guid=line[2], pid=line[1])
cursor.execute(command)
if count % 1000 == 0:
print('program' + name + ' cursor execute', count)
except csv.Error:
print('program csv.Error:', count)
continue
except IndexError:
print('program IndexError:', count)
continue
except StopIteration:
break
except Exception as e:
print('program' + name, str(e))
finally:
connection.commit()
connection.close()
file.close()
print('program' + name + ' info done.time cost:', time.time()-begin)`
И метод мульти-обработки:
import multiprocessing as mp
def multiproccess():
pool = mp.Pool(3)
results = []
paths = ['C:\\testfile01.csv', 'C:\\testfile02.csv', 'C:\\testfile03.csv']
name = 1
for path in paths:
results.append(pool.apply_async(importprogram, args=(path, str(name))))
name = name + 1
print(result.get() for result in results)
pool.close()
pool.join()
И основной метод:
if __name__ == '__main__':
multiproccess()
Я новичок в Python.Как я могу сделать код или сам путь идет не так?Должен ли я использовать только один процесс для завершения чтения и импорта данных?