在 python2.7 中使用 pool.apply_async 不将值插入 MySQL 表

Posted

技术标签:

【中文标题】在 python2.7 中使用 pool.apply_async 不将值插入 MySQL 表【英文标题】:Values are not inserted into MySQL table using pool.apply_async in python2.7 【发布时间】:2018-10-07 15:43:12 【问题描述】:

我正在尝试运行以下代码来为某个应用程序并行填充表。首先定义以下函数,它应该连接到我的数据库并使用给定的值执行 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()

一切正常,没有错误。但最后,我的表是空的,这意味着插入不成功。在许多谷歌搜索之后,我已经尝试了很多方法来解决这个问题(包括添加列名以进行插入)并且没有成功。任何建议,将不胜感激。 (在python2.7,gcloud(ubuntu)中运行代码。注意这里粘贴后缩进可能有点乱)

还请注意,“块”完全遵循所需的数据格式。

注意。这是example 的一部分 请注意,我在上面的示例(链接)中唯一改变的是,我将创建和插入表的步骤分开,因为我在 gcloud 平台上运行我的代码并且它强制执行 GTID 标准。

【问题讨论】:

原来问题出在使用 MYSQL_CNF = os.path.abspath('.') + '/mysql.cnf' 。我手动插入了连接参数,现在可以使用了。 您可以添加您的解决方案作为答案吗?谢谢。 能否具体说明一下 MySQL 在哪里运行以及代码在哪里运行(控制台、VM 实例)? 【参考方案1】:

解决方案是将 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()

【讨论】:

以上是关于在 python2.7 中使用 pool.apply_async 不将值插入 MySQL 表的主要内容,如果未能解决你的问题,请参考以下文章

amqp模块在python2.7.6版本上报错的问题

python2.7添加注释后,代码无法保存

python2.7入门---元组

非root用户在centos上的python2.7

Python2.7从入门到精通

linux 下python2.7.6怎么安装sklearn