使用 python2 中的 pool.apply_async 未将值插入 MySQL table。7
Values are not inserted into MySQL table using pool.apply_async in python2.7
我正在尝试 运行 以下代码为某个应用程序并行填充 table。首先定义了以下函数,它应该连接到我的数据库并使用给定的值执行 sql 命令(插入 table)。
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()
一切正常,没有错误。但最后,我的 table 是空的,这意味着插入不成功。经过多次 google 搜索后,我尝试了很多方法来解决这个问题(包括添加用于插入的列名),但都没有成功。任何建议,将不胜感激。 (运行ning code in python2.7, gcloud (ubuntu) 注意这里粘贴后缩进可能有点乱)
另请注意,"chunk" 完全遵循所需的数据格式。
注意。这是example的一部分
请注意,我在上面的示例(链接)中唯一改变的是我将创建和插入 tables 的步骤分开,因为我在 gcloud 平台上 运行ning 我的代码它执行 GTID 标准。
解决方案是将 dbwriter 函数更改为:
conn = MySQLdb.connect(host = # host ip,
user = # username,
passwd = # password,
db = 'dedupe')
cursor = conn.cursor()
cursor.executemany(sql, rows)
cursor.close()
conn.commit()
conn.close()
我正在尝试 运行 以下代码为某个应用程序并行填充 table。首先定义了以下函数,它应该连接到我的数据库并使用给定的值执行 sql 命令(插入 table)。
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()
一切正常,没有错误。但最后,我的 table 是空的,这意味着插入不成功。经过多次 google 搜索后,我尝试了很多方法来解决这个问题(包括添加用于插入的列名),但都没有成功。任何建议,将不胜感激。 (运行ning code in python2.7, gcloud (ubuntu) 注意这里粘贴后缩进可能有点乱)
另请注意,"chunk" 完全遵循所需的数据格式。
注意。这是example的一部分 请注意,我在上面的示例(链接)中唯一改变的是我将创建和插入 tables 的步骤分开,因为我在 gcloud 平台上 运行ning 我的代码它执行 GTID 标准。
解决方案是将 dbwriter 函数更改为:
conn = MySQLdb.connect(host = # host ip,
user = # username,
passwd = # password,
db = 'dedupe')
cursor = conn.cursor()
cursor.executemany(sql, rows)
cursor.close()
conn.commit()
conn.close()