Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
KeyError:0在python中使用多处理_Python_Multithreading_Multiprocessing_Keyerror - Fatal编程技术网

KeyError:0在python中使用多处理

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()

我有以下代码,其中我尝试调用函数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
文件“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