Я пытаюсь запустить следующий код для параллельного заполнения таблицы для определенного приложения. Сначала определяется следующая функция, которая должна подключиться к моей базе данных и выполнить команду sql с указанными значениями (вставить в таблицу).
def dbWriter(sql, rows) :
# load cnf file
MYSQL_CNF = os.path.abspath('.') + '/mysql.cnf'
conn = MySQLdb.connect(db='dedupe',
charset='utf8',
read_default_file = MYSQL_CNF)
cursor = conn.cursor()
cursor.executemany(sql, rows)
conn.commit()
cursor.close()
conn.close()
А затем есть этот кусок:
pool = dedupe.backport.Pool(processes=2)
done = False
while not done :
chunks = (list(itertools.islice(b_data, step)) for step in
[step_size]*100)
results = []
for chunk in chunks :
print len(chunk)
results.append(pool.apply_async(dbWriter,
("INSERT INTO blocking_map VALUES (%s, %s)",
chunk)))
for r in results :
r.wait()
if len(chunk) < step_size :
done = True
pool.close()
Все работает и ошибок нет. Но в конце моя таблица пуста, что означает, что вставки были неудачными. Я пробовал так много вещей, чтобы исправить это (включая добавление имен столбцов для вставки) после многих поисков в Google, и не увенчались успехом. Мы ценим любые предложения. (запуск кода на python2.7, gcloud (ubuntu). обратите внимание, что отступы могут быть немного испорчены после вставки здесь)
Обратите также внимание, что «чанк» точно соответствует требуемому формату данных.
Примечание. Это часть этого примера
Обратите внимание, что единственное, что я изменяю в приведенном выше примере (связан), - это то, что я разделяю шаги по созданию и вставке в таблицы, так как я запускаю свой код на платформе gcloud и он применяет стандарты GTID.