cPickle.PicklingError:无法挑选<type'instancemethod'=“”>:属性查找__builtin __ .instancemethod failed

时间:2015-10-13 16:19:51

标签: python mysql

我已经查看了Can't pickle <type 'instancemethod'> when using python's multiprocessing Pool.map(),其中描述了一个类似的问题,但我没有使用课程&#39;方法

我尝试做的是同时更新多个MySQL服务器。我有:

def do_update(cur, update, output_fh):
    try:
        cur.execute(update)
    except MySQLdb.MySQLError, e:
        output_fh.write("failed on:{}\n".format(update))
        raise MySQLdb.MySQLError(e)

执行实际更新。我尝试了两种不同的方法来使用多处理池并行更新,这两种方法都会导致主题中的错误消息。

1

def update_score_wrapper(args):
    do_update(*args)
pool = multiprocessing.Pool(processes=3)
pool.map(update_score_wrapper, ((cur2, update, output_fh),
         (cur3, update, output_fh), (cur4, update, output_fh)))

其中cur2,cur3和cur4是MySQLdb游标,update是update语句,output_fh是共享日志的文件句柄。

2:

partial_score = functools.partial(
    do_update, update=update, output_fh=output_fh)
pool = multiprocessing.Pool(processes=3)
pool.map(partial_score, (cur2, cur3, cur4))

任何人都能告诉我这里出了什么问题?我怀疑是光标或文件句柄可能不可选?如果是这样,有没有其他方法可以尝试?

0 个答案:

没有答案