我已经查看了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)
执行实际更新。我尝试了两种不同的方法来使用多处理池并行更新,这两种方法都会导致主题中的错误消息。
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是共享日志的文件句柄。
partial_score = functools.partial(
do_update, update=update, output_fh=output_fh)
pool = multiprocessing.Pool(processes=3)
pool.map(partial_score, (cur2, cur3, cur4))
任何人都能告诉我这里出了什么问题?我怀疑是光标或文件句柄可能不可选?如果是这样,有没有其他方法可以尝试?