【发布时间】:2014-04-10 18:43:37
【问题描述】:
我有以下代码,我尝试调用一个函数 compute_cluster 进行一些计算并将结果写入 txt 文件(每个进程独立将其结果写入不同的 txt 文件),但是,当我运行以下代码时:
def main():
p = Pool(19)
p.map(compute_cluster, [(l, r) for l in range(6, 25) for r in range(1, 4)])
p.close()
if __name__ == "__main__":
main()
它崩溃并出现以下错误:
File "RMSD_calc.py", line 124, in <module>
main()
File "RMSD_calc.py", line 120, in main
p.map(compute_cluster, [(l, r) for l in range(6, 25) for r in range(1, 4)])
File "/usr/local/lib/python2.7/multiprocessing/pool.py", line 225, in map
return self.map_async(func, iterable, chunksize).get()
File "/usr/local/lib/python2.7/multiprocessing/pool.py", line 522, in get
raise self._value
KeyError: 0
当我在网上搜索“KeyError: 0”的含义时,我没有发现任何有用的信息,因此非常感谢任何关于为什么会发生此错误的建议
【问题讨论】:
-
KeyError是当您尝试取消引用字典等项目时的一般错误。x[1],但索引(即1)不在字典中。但这并不能真正解释那里解引用字典的原因。 -
compute_cluster()的头部是什么,这个函数返回什么? -
在
compute_cluster()的某个地方,您有一个KeyError。也许您错误地使用了字典?我们不知道在哪里,除非您也添加compute_cluster()工具的代码。该函数在另一个进程中运行的事实使其更难调试。从追溯来看,看起来错误来自多处理,但很可能是传递的函数中的问题。
标签: python multithreading multiprocessing keyerror