KeyError:0在python中使用多处理
我有以下代码,其中我尝试调用函数compute_cluster,该函数执行一些计算并将结果写入txt文件(每个进程将其结果独立写入不同的txt文件),但是,当我运行以下代码时:KeyError:0在python中使用多处理,python,multithreading,multiprocessing,keyerror,Python,Multithreading,Multiprocessing,Keyerror,我有以下代码,其中我尝试调用函数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()
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
文件“RMSD_calc.py”,第124行,在
main()
文件“RMSD_calc.py”,第120行,主目录
p、 映射(计算_簇,[(l,r)表示范围(6,25)中的l,表示范围(1,4)中的r)])
文件“/usr/local/lib/python2.7/multiprocessing/pool.py”,第225行,在地图中
返回self.map\u async(func,iterable,chunksize).get()
get中的文件“/usr/local/lib/python2.7/multiprocessing/pool.py”,第522行
提升自我价值
关键错误:0
当我在网上搜索“KeyError:0”的含义时,我没有发现任何有用的信息,因此非常感谢您提供任何关于此错误发生原因的建议
KeyError
发生在子进程的compute\u cluster()
中,并且p.map()
在父进程中为您重新设置它:
from multiprocessing import Pool
def f(args):
d = {}
d[0] # <-- raises KeyError
if __name__=="__main__":
p = Pool()
p.map(f, [None])
来自多处理导入池的
def f(参数):
d={}
d[0]#keyrorm
是当您尝试取消引用某项(如x[1]
)时的一般错误,但索引(即1
)不在词典中。但这并不能真正解释什么是取消对字典的引用。compute\u cluster()
的头是什么?这个函数返回什么?在compute\u cluster()
中的某个地方有一个keyrerror
。也许你的口述不正确?我们不知道在哪里,除非您也为compute\u cluster()
工具添加代码。函数在另一个进程中运行这一事实使调试变得有点困难。从回溯来看,错误似乎来自多处理,但很可能是传递的函数中存在问题。
Traceback (most recent call last):
File "raise-exception-in-child.py", line 9, in <module>
p.map(f, [None])
File "/usr/lib/python2.7/multiprocessing/pool.py", line 227, in map
return self.map_async(func, iterable, chunksize).get()
File "/usr/lib/python2.7/multiprocessing/pool.py", line 528, in get
raise self._value
KeyError: 0
import logging
from multiprocessing import Pool
def f(args):
d = {}
d[0] # <-- raises KeyError
def f_mp(args):
try:
return f(args)
except Exception:
logging.exception("f(%r) failed" % (args,))
if __name__=="__main__":
p = Pool()
p.map(f_mp, [None])
ERROR:root:f(None) failed
Traceback (most recent call last):
File "raise-exception-in-child.py", line 10, in f_mp
return f(args)
File "raise-exception-in-child.py", line 6, in f
d[0] # <-- raises KeyError
KeyError: 0